我正在尝试使用以下方法将使用rust 的字符串收集到 vec 中:
let fields : ~[~str] = row.split_str(",").collect();
我收到以下错误:预期 std::iter::FromIterator<&str>,但找到 std::iter::FromIterator<~str>(str 存储不同:预期 &
但找到~
)
我尝试过使用类型提示但没有成功
最佳答案
.split_str
返回 iterator over &str
slices ,也就是说,它正在返回 row
的 subview 数据。借来的&str
不是自有的~str
: 要使这项工作有效,请收集到 ~[&str]
,或者,复制每个 &str
进入~str
收集前:
let first: ~[&str] = row.split_str(",").collect();
let second: ~[~str] = row.split_str(",").map(|s| s.to_owned()).collect();
FWIW,如果您要拆分单字符谓词,则 split
会更有效率,(例如 row.split(',')
在这种情况下)。
另外,我推荐你upgrade to a more recent version of Rust , 0.11 是最近发布的,但 nightlies 是推荐的安装目标(将上述文档链接中的 0.10
更改为 0.11
或 master
以获得相应的文档)。
对于 nightly,上面的两个片段将被写成:
let first: Vec<&str> = row.split(',').collect();
let second: Vec<String> = row.split(',').map(|s| s.to_string()).collect();
(最后,如果您正在努力区分 &str
与 ~str
又名 String
、 I wrote up some details a while ago 。)
关于rust - 收集到 rust 中拥有的字符串的拥有的 vec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24689463/