顺便说一句,这是针对当前的0.6 Rust主干的,不确定确切的提交。
假设我想对一些字符串进行for 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。但这只是一个例子。
那么,如何从借用的字符串中获取拥有的字符串呢?还是我完全误解了。
发布于 2013-03-21 17:04:32
您应该调用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
发布于 2013-03-13 20:49:26
起初,我认为可以使用copy line
从借用的指向字符串的指针创建自己的指针,但这显然是复制了挖掘式指针。
所以我找到了str::from_slice(s: &str) -> ~str
。这可能就是您所需要的。
https://stackoverflow.com/questions/15379408
复制相似问题