Извините за позднюю публикацию, но все же для информации, я также столкнулся с такой же проблемой, поэтому я использовал обновленную версию хромированного ревербера ie.2.28 для обновленного браузера Chrome. 55 до 57, которые решили мою проблему.
Этот ответ относится к версии Rust до версии 1.0, и необходимые функции были удалены
blockquote>Вы можете использовать функцию
std::result::fold
для этого , Он останавливает повторение после встречи с первымErr
.Пример программы, которую я только что написал:
fn main() { println!("{}", go([1, 2, 3])); println!("{}", go([1, -2, 3])); } fn go(v: &[int]) -> Result<Vec<int>, String> { std::result::fold( v.iter().map(|&n| is_positive(n)), vec![], |mut v, e| { v.push(e); v }) } fn is_positive(n: int) -> Result<int, String> { if n > 0 { Ok(n) } else { Err(format!("{} is not positive!", n)) } }
Выход:
Ok([1, 2, 3]) Err(-2 is not positive!)
FromIterator
, могу ли я применить этот трюк? Ограничено ли этоFromIterator
или оно может применяться более широко? Как Rust знает, как использоватьFromIterator
? – Kai Sellgren 15 October 2014 в 17:51collect
, которая является полиморфной по типу возврата, которая должна реализовыватьFromIterator
. Я не знаю, что вы подразумеваете под ", может ли он применяться более широко. Руста поддерживает полиморфные типы возврата ... Итак, да? (Дополнительные примеры полиморфизма возвращаемого типа см. ВRng
иDefault
свойствах.) – BurntSushi5 16 October 2014 в 11:41from_iter()
? doc.rust-lang.org/std/iter/trait.FromIterator.html – Kai Sellgren 16 October 2014 в 17:42from_iter
вызывается в методеcollect
. – BurntSushi5 16 October 2014 в 21:39