rdm*_*fee 3 rust rust-obsolete
我正在尝试使用以下方法将 Rust 中的字符串收集到一个 vec 中:
let fields : ~[~str] = row.split_str(",").collect();
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:预期 std::iter::FromIterator<&str>, but found std::iter::FromIterator<~str> (str storage differents: expected &
but found ~
)
我尝试使用类型提示但没有成功
.split_str
返回slices 上的迭代器&str
,也就是说,它返回row
数据的子视图。借来&str
的不是拥有的~str
:为了使这项工作,要么收集到 a ~[&str]
,要么在收集之前将每个复制&str
到 a 中~str
:
let first: ~[&str] = row.split_str(",").collect();
let second: ~[~str] = row.split_str(",").map(|s| s.to_owned()).collect();
Run Code Online (Sandbox Code Playgroud)
FWIW,如果您在单字符谓词上进行拆分,那么split
效率会更高(例如row.split(',')
在这种情况下)。
此外,我建议您升级到更新的 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();
Run Code Online (Sandbox Code Playgroud)
(最后,如果你在&str
与~str
aka的区别中挣扎String
,我不久前写了一些细节。)