From: brk@... Date: 2001-03-07T16:07:23+09:00 Subject: [ruby-talk:12214] Re: FEATURE REQUEST: 'my' local variables If you want to use this sort of idiom, try this example which doesn't require any changes to the language: require 'context' #See below... x = 0 { my = Context.new my.x = 7 my.x #-> 7 } x #-> 0 Here's the code for Context (suggestions welcome, I'm sure there are better ways to do this). You can probably use something like this to suit your needs. Also, if you want immutable names, do this: my = Context.new(false) my.x = 2 my.x # -> 2 my.x = 5 #-> RuntimeError: Can't reassign variable #context.rb class Context @@method_template = %q{ def X @names['X'] end if @mutable then def X=(val) @names['X'] = val end else def X=(val) raise RuntimeError, "Can't reassign variable" end end } def initialize(mutable = true) @names = Hash.new @mutable = mutable end def method_missing(sym, *args) attrib = sym.to_s if attrib[-1,1] != "=" raise NameError, "undefined method '#{attrib}' for object #{to_s}" end prop_name = attrib[0, (attrib.length - 1)] new_meth_def = @@method_template.gsub(/X/, prop_name) instance_eval(new_meth_def) @names[prop_name] = args[0] end end Hope that helps, Bryn -----Original Message----- From: cjon@sapphire.engin.umich.edu [mailto:cjon@sapphire.engin.umich.edu] Sent: Tuesday, March 06, 2001 9:10 PM To: ruby-talk@ruby-lang.org; ruby-talk@netlab.co.jp Subject: [ruby-talk:12207] Re: FEATURE REQUEST: 'my' local variables Leo Razoumov (see_signature@127.0.0.1) wrote: > # PROPOSED FEATURE: > x = 0 #line_1 > { > my x = 7 # new varible 'x' shadowing 'x' from line_1 > x # -> 7 > } > x # -> 0 This seems to me like it would be very useful. Cullen J O'Neill -- cjon@engin.umich.edu