From: "Guy N. Hurst" Date: 2000-10-24T01:42:11+09:00 Subject: [ruby-talk:5799] Re: local variables (nested, in-block, parameters, etc.) Yukihiro Matsumoto wrote: > ... > Thank you for the problem analysis. > Thanks for reading it ;-) > My current idea is to introduce new block parameter syntax <>, which > makes all variables inside block local. In addition, optional block > local variable declaration might be added, like: > > l = lambda{ ...} > This is at least better than c=c constructs. I think it would also be important to have the ability to specify *all* local variables somehow (maybe to avoid long lists or to avoid having to know names). Some means of determining what happens when a variable is on both sides needs to be considered: . Maybe default it to mean that 'b' is a block local initialized to local var 'b'. Maybe it should mean the local var should be bound to the block var. Maybe... > Plus, if compatibility problem would not be so critical, || block > parameters might NOT be in-block vars even if they are NOT seen before > the block. Note I've not decided anything yet. We still need discussions. > So, does this amount to it *creating* a local var to bind to if no local var already exists? GREAT idea. And I don't think it would cause much incompatibility since if no local var was seen, then it probably isn't used later, either (or if it is, is probably initialized). The only other thing I can think of is if they are using a method by the same name; they will suddenly get a different result if they use the special shortcut for the method without parentheses or parameters... > Good things about this are: > > * We would be freed from local name conflict problem finally. > > * single block parameter (e.g. |a|) is something in between |a,| and > |*a|. But behavior would be clear. > > Bad things about this are: > > * it introduces explicit declaration, which Ruby has avoided for > long time. > I don't quite understand about explicit declaration - what it consists of and why it is avoided. I mean, we *already* have explicit declaration, what with having to initialize a local var we intend to use in the block and after the block. At least, that is my perspective. Guy N. Hurst -- HurstLinks Web Development http://www.hurstlinks.com/ Norfolk, VA - (757)623-9688 PHP/MySQL - Ruby/Perl - HTML/Javascript