loop { doSomething(); next if someCondition(); doSomethingElse(); }
-- Mark Biggar [EMAIL PROTECTED] [EMAIL PROTECTED] [EMAIL PROTECTED] -------------- Original message ---------------------- From: "Mark J. Reed" <[EMAIL PROTECTED]> > OK, so let's look at the general problem. The structure is this: > > doSomething(); > while (someCondition()) > { > doSomethingElse(); > doSomething(); > } > > ...and you want to factor out the doSomething() call so that it only > has to be specified once. > > Is that correct, Aristotle? > > The "gotcha" is that the first doSomething() is unconditional, while > the first doSomethingElse() should only happen if the loop condition > is met (which means just moving the test to the end of the block > doesn't solve the problem). > > IFF the doSomething() can be reasonably combined with the conditional > test, then Bruce's solution works, but that won't necessarily be the > case in general. Overall, the goal is to ensure that by the end of > the loop the program is in the state of having just called > doSomething(), whether the loop runs or not - while also ensuring that > the program is in that state at the top of each loop iteration. > > It does seem like a closure trait sort of thing, but I don't think > it's currently provided by the p6 spec.