172 похожих чатов

Let v = match do_something_that_might_fail() { Ok(v)

=> v,
Err(e) => return Err(e), // возврат из функции
}


подскажите, пожалуйста, почему Ok(v) => v возвращает значение в переменную, а ветка Err(e) => прерывает исполнение функции и возвращает err не в переменную, а в возвращаемые параметры исполняемой функции? почему блочное выражение в какой-то из своих веток может внезапно завершить выполнение функции?

10 ответов

14 просмотров

Потому что явно указан return

Vadim-Inshakov Автор вопроса

можете убрать return, результат тот же

Vadim Inshakov
можете убрать return, результат тот же

Err() возвращает результат из функции, особенно при match, иначе ты просто получишь тот же Result<T, E>, зачем тебе это? А так да, если какая-нибудь v находится в самом первом по иерархии пространстве имён функции, то Err и Ok вернут результат функции, если же она будет внутри if, if let, unwrap_or_else то нужно явно указать return

Vadim Inshakov
можете убрать 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

Vadim-Inshakov Автор вопроса
Alexey Sokolovskiy
результат не тот же: fn can_fail() -> Result<Strin...

да, так работает, но вы изменили Result<(), String> на Result<String, String>

Vadim Inshakov
да, так работает, но вы изменили Result<(), String...

Без этого код не скомпилируется, будет ошибка что match has incompatible arm types:

Alexey Sokolovskiy
screenshot

Здравствуйте. Не могли бы вы сказать какое IDe у вас на скрине?

Alexey Sokolovskiy
neovim

чисто для rust? или он для всех

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта