2014-11-25 35 views
2

我知道這3個結構之間的區別是什麼 - 的a字符串的結構,終身

struct S1 { 
    a: &'static str, 
    b: int 
} 

struct S2<'aa> { 
    a: &'aa str, 
    b: int 
} 

struct S3 { 
    a: String, 
    b: int 
} 

fn main() { 
    let s1 = S1 {a: "123", b: 123}; 
    let s2 = S2 {a: "123", b: 123}; 
    let s3 = S2 {a: "123".into_owned(), b: 123}; 
} 

一輩子,你能告訴我的第一,第二和第三,換言之的使用情況下,什麼時候使用第一,第二,第三,何時 - 第二,第三,第三等?在文檔中沒有解釋。

回答

2

S1:這僅允許您使用字符串常量,或其他字符串用static(即他們永遠不能被釋放)的壽命。

S2:這讓你可以使用任意字符串切片,只要它們具有可表達的生命週期。例如,您不能從Iterator返回S2的動態實例,因爲無法表達涉及的生命週期。這就是說,這可以讓你避免不必要的堆分配。

S3:最普通的,因爲它擁有它的內容,但需要使用堆分配。

+0

哪一個用得最多?你有什麼時間使用它們的例子嗎? – 2014-11-25 06:19:28

+0

'S2'是最高性能的,'S1'一樣快,更容易推理,但限制性更強,'S3'是最慢的,但容易推理。如果可以的話,使用'S2',如果必須使用'S1' /'S3'。如果你想要例子......找到字符串處理Rust代碼並閱讀它。我想不出任何短小而不是無用的手法。 – 2014-11-25 07:20:18