如何在Rust中将&str转换为~str?

Ros*_*oss 19 string pointers rust rust-obsolete

这是针对当前0.6 Rust的干线,不确定确切的提交.

假设我想在每个字符串中使用,并且我的闭包采用了一个借用的字符串指针参数(&str).我希望我的闭包将其参数添加到拥有的字符串〜[〜str]的拥有向量中以便返回.我对Rust的理解很弱,但我认为字符串是一个特殊情况,你不能用*右解引它们?如何将我的字符串从&str转换为vector的push方法,该方法需要~str?

这是一些无法编译的代码

fn read_all_lines() -> ~[~str] {
    let mut result = ~[];
    let reader = io::stdin();
    let util = @reader as @io::ReaderUtil;
    for util.each_line |line| {
        result.push(line);
    }
    result
}
Run Code Online (Sandbox Code Playgroud)

它不会编译,因为它推断结果的类型是[&str],因为那是我正在推动的.更不用说它的生命周期是错误的,因为我正在添加一个寿命较短的变量.

我意识到我可以使用ReaderUtil的read_line()方法返回一个~str.但这只是一个例子.

那么,如何从借来的字符串中获取拥有的字符串?或者我完全是误解.

小智 11

您应该调用StrSlice trait的方法to_owned,如下所示:

fn read_all_lines() -> ~[~str] {
    let mut result = ~[];
    let reader = io::stdin();
    let util = @reader as @io::ReaderUtil;
    for util.each_line |line| {
        result.push(line.to_owned());
    }
    result
}
Run Code Online (Sandbox Code Playgroud)

StrSlice特质文档在这里:

http://static.rust-lang.org/doc/core/str.html#trait-strslice