顺便说一句,这是针对当前 0.6 Rust 主干的,不确定确切的提交。
假设我想对一些字符串执行 each 操作,而我的闭包采用借用的字符串指针参数 (&str)。我希望我的闭包将其参数添加到要返回的拥有字符串 ~[~str] 的拥有向量中。我对 Rust 的理解很薄弱,但我认为字符串是一种特殊情况,您不能用 * 取消引用它们,对吧?如何将字符串从 &str 获取到采用 ~str 的向量的 push 方法中?
下面是一些无法编译的代码
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
}
它无法编译,因为它推断结果的类型为 [&str],因为这就是我要插入的。更不用说它的生命周期是错误的,因为我向它添加了一个生命周期较短的变量。
我意识到我可以使用 ReaderUtil 的 read_line() 方法,它返回一个 ~str。但这只是一个例子。
那么,如何从借用的字符串中获取自己的字符串呢?还是我完全误解了。
最佳答案
您应该调用 StrSlice 特征的方法 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
}
StrSlice 特征文档在这里:
http://static.rust-lang.org/doc/core/str.html#trait-strslice
关于string - 我如何在 Rust 中将 &str 转换为 ~str?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15379408/