4 ms·
Something I found eyebrow-raising is that the expected type of expression `x` in `if (x) { ... }` actually changes based on what syntax is used on an `else` lin
by frou_dh 4y ago
Something I found eyebrow-raising is that the expected type of expression `x` in `if (x) { ... }` actually changes based on what syntax is used on an `else` line that comes later.
- eatonphil 4y agoI haven't seen that yet. Could you give an example?
- frou_dh 4y agoIIRC in the following, the expected type of `x` in B stops being bool (but I no longer have a Zig env set up so I can't test it). # A if (x) { ... } else { ... } # B if (x) { ... } else |y| { ... }
- hansvm 4y agoThat looks right. If/else is overloaded as doing the normal thing with bools by default, and if you try to capture something exceptional with `else |y|` then the type of `x` is inferred to be something capable of such a capture -- optionals or error unions.
- frou_dh 4y agoIn a statically typed language, this specifically comes off to me as an artificial way to keep the total number of keywords down.