Соберите в свой собственный vec собственных строк в ржавчине
Я пытаюсь собрать в vec строк ржавчины с помощью следующего:
let fields : ~[~str] = row.split_str(",").collect();
Я получаю следующую ошибку: ожидается std:: iter:: FromIterator<& str>, но обнаружен std:: iter:: FromIterator<~ str> (хранилище str отличается: ожидается &
но нашел ~
)
Я пытался использовать подсказки типа, но безуспешно
1 ответ
.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();
FWIW, если вы разделяете на односимвольный предикат, то split
будет более эффективным, (например, row.split(',')
в этом случае).
Кроме того, я рекомендую вам перейти на более свежую версию 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
Я написал некоторые детали некоторое время назад.)