Object#instance_exec欲しいなあ

Ruby 1.8.7にはいろいろなRuby 1.9のメソッドがbackportされてウハウハなんだが、Object#instance_execが含まれなかったのが残念。
ついにEnumerable::Enumeratorまで入ったのになぁ。

Object#instance_execはObject#instance_evalにブロック引数が渡せるやつ。

class Foo
  def plus(a, b) a+b end
end

Foo.new.instance_exec(1, 3) {|a,b| plus(a,b) } # => 4

instance_execを実装するにはかなり大変である。

Ruby 1.8.7Ruby 1.9の振りをしているけどRuby 1.9になりきれてない感じ…大人ぶってる思春期の少女みたいだ。

それにしても、instance_execをselfに対して適用するとLispのletみたいだな。lambdaもいいけど、instance_execのほうがletっぽい。

instance_exec(1, 2) do |a, b|
  a     # => 1
  b     # => 2
  a + b # => 3
end

lambda do |a, b|
  a     # => 1
  b     # => 2
  a + b # => 3
end.call(1, 2)