2014-07-11 24 views
0

我尝试使用下面收集到字符串VEC生锈:收集到所有的字符串拥有VEC生锈

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

我得到以下错误:预期的std :: ITER :: FromIterator < &海峡>,但发现的std :: ITER :: FromIterator <〜STR>(STR存储有所不同:预计&但发现~

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

+0

什么你使用的是什么版本的Rust? – huon

回答

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是最近才发布,但在Nightlies版推荐的安装目标(改变0.100.11或在相应的文档上面的文档链接master)。

随着夜间,上述两个片段将被写成:

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的区别挣扎)

+0

谢谢!是的,我正在升级和改变我的语法。 – rdmcfee