Как Беви "оценивает" свои системы в зависимости от типа аргументов?

Bevy, новый игровой движок Rust и ECS, имеет функцию, в которой он "оценивает" свои системы в зависимости от типа аргументов. Из его документов:

Параметры, которые мы передаем "системной функции", определяют, на каких объектах работает система. В этом случае greet_people будет работать на всех объектах с компонентом Person и Name.

Выглядит это так:

struct Person;
struct Name(String);

fn greet_people(person: &Person, name: &Name) {
    println!("hello {}", name.0);
}

Как Беви удалось добиться этого? Я думал, что где-то читал, что Rust не поддерживает отражение таким образом.

1 ответ

Решение

Беви определяет набор черт (IntoQuerySystem а также IntoForEachSystem), которые реализуются функциями, соответствующими этим сигнатурам. Эти черты затем экспортируются прелюдией Беви. Одним из ограничений этого является то, что вы можете преобразовывать функции только с определенным количеством аргументов в системы, и аргументы должны быть в определенном порядке ([команда?], [Ресурсы...], [запросы / компоненты...]).

Другие вопросы по тегам