收集生锈的自有字符串vec

时间:2014-07-11 03:07:01

标签: rust rust-obsolete

我正在尝试使用以下内容收集生锈的字符串:

let fields : ~[~str] = row.split_str(",").collect();

我收到以下错误:预期std :: iter :: FromIterator<& str>,但找到了std :: iter :: FromIterator< ~str> (str存储不同:预期&但找到~

我尝试使用类型提示但没有成功

1 个答案:

答案 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.11master相应文档的文档链接。)

每晚,上面的两个片段将写成:

let first: Vec<&str> = row.split(',').collect();
let second: Vec<String> = row.split(',').map(|s| s.to_string()).collect();

(最后,如果你正在努力解决&str~str又名StringI wrote up some details a while ago的区别。)