クロージャ
def test() c = 0 a = Proc.new {|e| p [e,c]} c = 1 b = Proc.new {|e| p [e,c]} return a,b end a,b = test a[7] => [7, 1] b[8] => [8, 1]
関数a,bはcを共有するのか.
自分でクロージャを実装するとしたら,a,bで別々のcを持つようにするのか?と考えてみたが,こっちのほうがいいか.
でも,もしブロックスコープが存在するなら,a,bで別のcを指す必要があるよな.
!!! pseudo code!!! def test() a=nil b=nil { c = 0 a = Proc.new {|e| p [e,c]} } { c = 1 b = Proc.new {|e| p [e,c]} } return a,b end a,b = test a[7] b[8]
もしかして,もしかしなくても,メソッドtestの中で宣言したローカル変数=メンバ変数,定義した関数=メンバ関数としてインスタンス(もどき)が作れる?