|
Roberto Ierusalimschy kirjoitti 17.2.2009 kello 20:14:
I do not see why the need for the <scoped_statements>. It would be simpler to add only a new form of locals. Something like local finalized f, g = ... that calls ":close()" (or __gc??) when it goes out of scope. Of course, you can (should?) use a conventional do-end around it:And all of that can easily be done using token modifiers. Case solved? :)I do not see how this can be done with token modifiers, if we want to handle exceptional exits too. -- Roberto
Yes, you are right. Token modifiers would cope with the normal exits (break/return/end of scope) but they couldn't "see" an error happening in some called function, for example. Not without a pcall.
As to the coroutine issue, would it be valid to just say a coroutine switch (yield/resume) is not allowed to take place within a finalizable scope. Would that be too restricted in practice? If not, then the coroutine problem vanishes.
I do have one working solution to this, which is the Lanes approach. But I know it's not the generic answer.
-asko