2 ms·
It can and you in fact either have to mark that you return that error when you use try, or you have to provide a default value in a catch block: fn potential
by kaba0 3y ago
It can and you in fact either have to mark that you return that error when you use try, or you have to provide a default value in a catch block:
fn potentiallyErrorReturningFunc() !u64 {
...
}
const foo = potentiallyErrorReturningFunc() catch { 0 };
One notable difference to most other languages is it being a value only, basically a product type of return value XOR error. These error values get serialized into a number by the compiler that is unique, and on the type system level you deal with sets of these error values. Quite clever in case of a low-level system, in my opinion.
- flohofwoe 3y ago> const foo = potentiallyErrorReturningFunc() catch { 0 }; Nitpick, but AFAIK this won't work and needs to be rewritten either to: const foo = potentiallyErrorReturningFunc() catch 0; ...or to: const foo = potentiallyErrorReturningFunc() catch blk: { break :blk 0; } (I wish there would be a more convenient way to return a value from a scope block, not necessarily with a "dangling expression" like Rust, but maybe at least getting rid of the label somehow)