Type Inference and Try Blocks
Mitacha
mateusz.mitaszka at gmail.com
Tue Jan 21 08:30:00 UTC 2020
On Monday, 20 January 2020 at 23:16:07 UTC, Henry Claesson wrote:
> This isn't a D-specific "problem", but there may be D-specific
> solutions.
> I have a function `doSomething()` that returns a Voldemort
> type, and this same function also throws. So, there's this:
>
> try {
> auto foo = doSomething();
> } catch (AnException e) {
> // Do stuff
> }
>
> The problem that I'm encountering is that I'd like, assuming no
> exception was thrown, to use foo outside the `try` (or
> `finally`) block to avoid nesting as any operations on `foo`
> from that point onward may also throw. Are there any constructs
> that act as alternatives to try/catch/finally so that I can do
> this?
>
> (This issue could very well stem from poor design and not being
> familiar with programming using exceptions. So feel free to
> ignore.)
>
> Thanks
You could try using `ifThrown` from `std.exception`. It lets you
turn statement based exception handling into expression based
one. So, if there is some "default" value in your case you could
return that.
auto foo = doSomething().ifThrown!AnException("defaultValue");
More information about the Digitalmars-d-learn
mailing list