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