gpt4 book ai didi

rust - Send 和 'static on a closure in rust 有什么区别?

转载 作者:行者123 更新时间:2023-11-29 07:58:23 26 4
gpt4 key购买 nike

考虑这些结构:

struct Promise1<T, Err> {
on_resolve:Option<|promised:T|: Send>,
on_reject:Option<|failed:Err|: Send>,
}

struct Promise2<T, Err> {
on_resolve:Option<|promised:T|: 'static>,
on_reject:Option<|failed:Err|: 'static>,
}

struct Promise3<'a, T, Err> {
on_resolve:Option<|promised:T|: 'a>,
on_reject:Option<|failed:Err|: 'a>,
}

具体来说,它们之间有什么区别?

什么是作为绑定(bind)的“发送”,为什么在提供发送时,我不再需要提供生命周期? Send 生成的隐式生命周期是多少?

具体来说,Send 和 'static 作为闭包边界有什么区别。

例如,这个有效:

let k:|int|:Send = |i:int| {};
let p:|int|:Send = |i:int| {};
Promise1 {
on_resolve:Some(k),
on_reject:Some(p)
};

但这不是:

let k = |i:int| {};
let p = |i:int| {};
Promise1 {
on_resolve:Some(k),
on_reject:Some(p)
};

错误:

error: mismatched types: expected `core::option::Option<'static |_|:Send>`, found 
`core::option::Option<|int|>` (expected bounds `Send`, found no bounds)

...但是,将 Promise2 或 Promise3 分别与 'static 和 'a 一起使用时效果很好。

最佳答案

Send 是一种“种类”http://doc.rust-lang.org/reference.html#built-in-traits

send : Able to be sent across task boundaries.

'static 是一个特殊的生命周期:持续整个程序的生命周期。

该引用还包含另一个关于发送 的启发性部分:(我们还没有为引用获得最佳布局)http://doc.rust-lang.org/reference.html#type-kinds

Send : Types of this kind can be safely sent between tasks. This kind includes scalars, boxes, procs, and structural types containing only other owned types. All Send types are 'static.

这就是为什么您可以在某些情况下互换使用它们的原因。

关于rust - Send 和 'static on a closure in rust 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26782294/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com