Rust 我对静态特征边界的理解正确吗?

Rust 我对静态特征边界的理解正确吗?,rust,traits,Rust,Traits,我正在使用specs ECS库,我有以下类型 trait TradeableResource{} #[derive(Component)] struct MarketMaker<T: TradeableResource + std::marker::Send + std::marker::Sync + 'static>{ lot_size:T } 因为类型Food只包含拥有的值,所以没有引用 我说得对吗?TLDR:是的,你说得对 事实上,“静态项”有点过载。它可以用作生存

我正在使用specs ECS库,我有以下类型

trait TradeableResource{}

#[derive(Component)]
struct MarketMaker<T: TradeableResource + std::marker::Send + std::marker::Sync + 'static>{
    lot_size:T
}
因为类型Food只包含拥有的值,所以没有引用


我说得对吗?TLDR:是的,你说得对

事实上,“静态项”有点过载。它可以用作生存期说明符,例如:

const T:&'static str=此处的静态字符串; fn handle_static:&'static T{..} 作为类型绑定:

特征T:'静态{..} fn手柄所拥有的:T 其中T:'静态{..} 这些是完全不同的情况,您的示例与第二个类似。您的陈述是正确的,以下示例对此进行了说明:


结构XTLDR:是的,你答对了

事实上,“静态项”有点过载。它可以用作生存期说明符,例如:

const T:&'static str=此处的静态字符串; fn handle_static:&'static T{..} 作为类型绑定:

特征T:'静态{..} fn手柄所拥有的:T 其中T:'静态{..} 这些是完全不同的情况,您的示例与第二个类似。您的陈述是正确的,以下示例对此进行了说明:


席先生,你的意思是我的例子和第二个例子相似,对吧?粘贴错误的例子,第二个例子。修正了它,thanksIt并不是真正的“静态的”超负荷的,因为你可以应用T:“任何具有相同含义的生命周期的界限。我想你的意思是我的示例与第二个类似,对吧?哎呀,粘贴的示例顺序错误,第二个确实如此。修复了它,thanksIt并不是真正的“静态的”重载,因为您可以应用T:“一个具有相同含义的任何生存期的边界。换句话说,“静态约束”意味着类型中的所有引用都在静态生存期内活动。如果没有引用,则此语句非常正确。换句话说,“静态约束”表示类型中的所有引用在静态生存期内有效。如果没有引用,则该语句基本正确。
#[derive(Component)]
struct Food(f64);
impl TradeableResource for Food{}

fn main() {
    let mut world = World::new();
    world.register::<MarketMaker<Food>>();

    world.create_entity().with(MarketMaker { lot_size: Food(4.0)}).build();
}