=> v,
Err(e) => return Err(e), // возврат из функции
}
подскажите, пожалуйста, почему Ok(v) => v возвращает значение в переменную, а ветка Err(e) => прерывает исполнение функции и возвращает err не в переменную, а в возвращаемые параметры исполняемой функции? почему блочное выражение в какой-то из своих веток может внезапно завершить выполнение функции?
Потому что явно указан return
можете убрать return, результат тот же
Err() возвращает результат из функции, особенно при match, иначе ты просто получишь тот же Result<T, E>, зачем тебе это? А так да, если какая-нибудь v находится в самом первом по иерархии пространстве имён функции, то Err и Ok вернут результат функции, если же она будет внутри if, if let, unwrap_or_else то нужно явно указать return
результат не тот же: fn can_fail() -> Result<String, String> { Err("123".into()) } fn main() -> Result<(), String> { let v = match can_fail() { Ok(v) => v, Err(e) => e, }; println!("Ok: {v}"); Ok(()) } Выведет Ok: 123
да, так работает, но вы изменили Result<(), String> на Result<String, String>
Без этого код не скомпилируется, будет ошибка что match has incompatible arm types:
Здравствуйте. Не могли бы вы сказать какое IDe у вас на скрине?
чисто для rust? или он для всех
Обсуждают сегодня