我正在尝试使用以下方式在rust中收集字符串到一个字符串向量中:
let fields : ~[~str] = row.split_str(",").collect();
我遇到了以下错误:预期的std :: iter :: FromIterator<&str>,但找到了std :: iter :: FromIterator<~str>(str存储不同:预期
&
,但找到~
)我尝试使用类型提示,但没有成功。
我正在尝试使用以下方式在rust中收集字符串到一个字符串向量中:
let fields : ~[~str] = row.split_str(",").collect();
&
,但找到~
).split_str
方法返回一个 迭代器,用于遍历 &str
切片,也就是说,它会返回 row
数据的子视图。这里的借用的 &str
并不是拥有所有权的 ~str
:为了让它工作,可以将其收集到一个 ~[&str]
中,或者在收集之前将每个 &str
复制到一个 ~str
中:
let first: ~[&str] = row.split_str(",").collect();
let second: ~[~str] = row.split_str(",").map(|s| s.to_owned()).collect();
如果您希望根据单个字符谓词来分割字符串,那么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();