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

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

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


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

10 ответов

13 просмотров

Потому что явно указан 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? или он для всех

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта