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");