В оригинале задача выглядит так:
#[derive(Debug, PartialEq, Eq)]
enum DivisionError {
// Example: 42 / 0
DivideByZero,
// Only case for `i64`: `i64::MIN / -1` because the result is `i64::MAX + 1`
IntegerOverflow,
// Example: 5 / 2 = 2.5
NotDivisible,
}
// TODO: Calculate `a` divided by `b` if `a` is evenly divisible by `b`.
// Otherwise, return a suitable error.
fn divide(a: i64, b: i64) -> Result<i64, DivisionError> {
todo!();
}
// TODO: Add the correct return type and complete the function body.
// Desired output: `Ok([1, 11, 1426, 3])`
fn result_with_list() {
let numbers = [27, 297, 38502, 81];
let division_results = numbers.into_iter().map(|n| divide(n, 27));
}
// TODO: Add the correct return type and complete the function body.
// Desired output: `[Ok(1), Ok(11), Ok(1426), Ok(3)]`
fn list_of_results() {
let numbers = [27, 297, 38502, 81];
let division_results = numbers.into_iter().map(|n| divide(n, 27));
}
В таком случае это вполне является допустимым и корректным решением (код из вопроса):
fn result_with_list() -> Result<Vec<i64>, DivisionError> {
let numbers: [i64; 4] = [27, 297, 38502, 81];
let division_results: Result<Vec<i64>, DivisionError> = numbers
.into_iter()
.map(|n| divide(n, 27))
.collect();
division_results
}
PS: изначально ответ писал ночью и мне показалось, что на входе функция получает 5 чисел, а отдаёт 4 и из-за этого подумал, что нужно пропустить ошибки - тогда можно было бы использовать filter_map для пропуска ошибок.
Изначально задача, видимо, рассчитана на то чтобы познакомить с тем что collect позволяет по разному коллектить итератор из Result