我正在尝试使用以下内容收集生锈的字符串:
let fields : ~[~str] = row.split_str(",").collect();
我收到以下错误:预期std :: iter :: FromIterator<& str>,但找到了std :: iter :: FromIterator< ~str> (str存储不同:预期&
但找到~
)
我尝试使用类型提示但没有成功
答案 0 :(得分:2)
.split_str
会返回iterator over &str
slices,也就是说,它会返回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();
FWIW,如果你拆分单字符谓词,那么split
会更有效率(例如row.split(',')
)。
另外,我建议您upgrade to a more recent version of Rust,最近发布了0.11,但是夜莺是推荐的安装目标(在上面将0.10
更改为0.11
或master
相应文档的文档链接。)
每晚,上面的两个片段将写成:
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的区别。)