考虑以下结构:发送和静态封闭锈的区别是什么?
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>,
}
有形,它们之间有什么区别呢?
什么是'发送'作为绑定,以及为什么当提供发送时,我不再需要提供一生? 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'在所有权模型和释放内存方面的工作原理吗?我无法包装我的头,这意味着将参数传递给声明了静态生命周期的函数。通过的项目是否必须在程序的整个生命周期中生活?这是一种内存泄漏吗? – jocull 2015-06-11 05:10:41
经过一番实验,我*认为*我明白了...... http://is.gd/8KWutk“静态”意味着给定的特质是静态的 - 不是传入的项目!这更有意义。 – jocull 2015-06-11 05:28:40
@jocull:''static'意思是“程序的生命周期”。 (1)'&'static T'意味着这个'T'的实例必须和程序一样长,它可以通过泄漏它(humpf ...)来实现,或者仅仅因为它是一个“静态”常量。 (2)'特性+'静态'意味着该项目不应该包含一个小于''静态'的生命周期的引用,它可以通过只包含'&'静态T'或不包含任何引用来实现。 – 2015-06-11 06:22:06