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

Reply via email to