Rubyのかくにん。
irb(main):001:0> def mkcounter(x) irb(main):002:1> proc{x+=1;x} irb(main):003:1> end => nil irb(main):004:0> c1 = mkcounter(10) => #<Proc:0x0319e4e0@(irb):2> irb(main):005:0> c2 = mkcounter(3) => #<Proc:0x0319e4e0@(irb):2> irb(main):006:0> c1.call => 11 irb(main):007:0> c1.call => 12 irb(main):008:0> c2.call => 4 irb(main):009:0> c1.call => 13
簡単にできる。
参照渡し?
irb(main):001:0> a = [1,2,3] => [1, 2, 3] irb(main):002:0> class A irb(main):003:1> @a irb(main):004:1> def initialize(a) irb(main):005:2> @a = a irb(main):006:2> end irb(main):007:1> def set(i, v) irb(main):008:2> @a[i] = v irb(main):009:2> end irb(main):010:1> end => nil irb(main):011:0> aa = A.new(a) => #<A:0x304b14c @a=[1, 2, 3]> irb(main):012:0> aa.set(0, 100) => 100 irb(main):013:0> a => [100, 2, 3]
参照渡し。