2014-11-25 56 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