5

在 Bevy 书中,使用了以下代码:

struct GreetTimer(Timer);

fn greet_people(
    time: Res<Time>, mut timer: ResMut<GreetTimer>, query: Query<&Name, With<Person>>) {
    // update our timer with the time elapsed since the last update
    // if that caused the timer to finish, we say hello to everyone
    if timer.0.tick(time.delta()).just_finished() {
        for name in query.iter() {
            println!("hello {}!", name.0);
        }
    }
}

timer.0name.0调用在做什么?这本书没有解决它,我看到它Timer有一个tick方法,所以.0这里在做什么,因为timer已经是一个Timer

4

1 回答 1

4

它与元组有关。在 rust 中,元组可以通过项目位置以这种方式访问​​:

let foo: (u32, u32) = (0, 1);
println!("{}", foo.0);
println!("{}", foo.1);

一些(元组)结构也会发生这种情况:

struct Foo(u32);

let foo = Foo(1);
println!("{}", foo.0);

操场

您可以进一步检查一些文档

于 2021-11-11T20:38:15.930 回答