考慮以下結構:發送和靜態封閉鏽的區別是什麼?
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