On Sunday, 24 February 2019 at 10:53:09 UTC, aliak wrote:
Because from what I understand, an Error is something you
should not be catching and represents something unrecoverable.
And it the docs say that it's unsafe to continue execution. But
the following code is very recoverable and I don't see how it's
unsafe to continue executing:
import optional;
import core.exception: SwitchError;
enum Enum : string {
one = "one", two = "two"
}
Optional!Enum makeEnum(string value) {
try {
final switch (value) {
case Enum.one: return some(Enum.one);
case Enum.two: return some(Enum.two);
}
} catch (SwitchError) {
return no!Enum;
}
}
unittest {
assert(makeEnum("one") == some(Enum.one));
assert(makeEnum("huh") == no!Enum);
}
Cheers,
- Ali
These days you can disable the check on final switches:
-check=switch=off
However, in this case, I would say you should actually be using a
normal switch because your input is not an enum and you aren't
constraining its value. IMO, using any type other than an enum as
the input for a final switch should be a compiler error.