2014-07-11 45 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