On Tuesday, 1 October 2013 at 13:09:01 UTC, Dicebot wrote:
On Tuesday, 1 October 2013 at 13:02:56 UTC, monarch_dodra wrote:
On Tuesday, 1 October 2013 at 12:46:50 UTC, Dicebot wrote:
Can't you use scope guards for that too? Those work for any
scope, not only function scope.
I hadn't thought of that before, but I don't think so. scope
guards are designed to run a specific piece of code, no mater
the code path.
What I mostly want to do is just break out of a "control
block".
Either that, or I'm being retarded...?
(I think your snippet misses actual labels so it was unclear:))
Right, sorry.
In that case you can always replace "control block + goto" with
nested function + return + scope guard inside it (if some
cleanup code needs to be run) unless I am missing something.
I was going to say: "but using functions is a pain when you have
variables that are in scope you need to reuse", but I keep
forgetting that D can indeed nest functions.
The only "limitation" of using a nested function, as opposed to a
"breakable block", is that can't move code into a nested
function, if it contains a (conditional) return.
I guess the conclusion is that each code snippet is unique. With
enough effort, you can probably eliminate goto from almost any
example. I do find that sometimes, you tend to have to jump
through hoops for that tough, and the final code is not
necessarily "better" either.