フラットスコープの実験

メタプログラミング Ruby で例示されてるコードは Kernel を書き換えたりしててちょっとお茶目過ぎるのでマイルドなバージョンを
(追記) バグっています。くわしくは id:metanest:20101112#1289514341 を

class Counter
	def initialize initval
		count = initval

		self.class.__send__(:define_method, :inc) {
			count += 1
		}

		self.class.__send__(:define_method, :dec) {
			count -= 1
		}
	end
end

foo = Counter.new 0
p foo.inc
p foo.inc
p foo.dec
p foo.dec
$ ruby19 foo.rb
1
2
1
0