Ruby guru, please help:

I'm creating variable-less storage, wich works fine:
#
def arr_fn() ; arr=[] ; lambda{ arr } ; end
fa = arr_fn ; fa[] << 10
fb = arr_fn ; fb[] << 20
p fa[] #=> [10]
p fb[] #=> [20]
# note that fa, fb have different binding for local arr - as expected

Now I'm trying to create instance-var-less storage:
#
class C
    def self.arr_meth( sym )
        arr = []
        define_method sym.to_sym, lambda{ arr }
    end
    arr_meth :arm
end
ca = C.new; ca.arm << 10
cb = C.new; cb.arm << 20
p ca.arm #-> [10, 20]
p cb.arm #-> [10, 20]
p( ca.arm.eql?( cb.arm ) ) #-> true
#
Why ca.arm, cb.arm share same local variable?
Is it bug or feature?

thanks
brs
Sergey

-- 
Posted via http://www.ruby-forum.com/.