Rubyでやります。まずは、一般的なクロージャ。 def make_counter(cnt) lambda { cnt += 1 } end counter = make_counter(0) puts counter.call #=> 1 puts counter.call #=> 2 puts counter.call #=> 3 counter2 = make_counter(10) puts counter2.call #=> 11 puts counter2.call #=> 12 puts counter2.call #=> 13 make_counterが返す無名関数の中に、cntが閉じ込められていますね。 それでは、本題。無名関数の代わりに匿名クラスを使います。 def Counter(cnt) Class.new do define_method(:count) do c