Rust 我对静态特征边界的理解正确吗?
我正在使用specs ECS库,我有以下类型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:是的,你说得对 事实上,“静态项”有点过载。它可以用作生存
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();
}