http://rubikitch.com/に移転しました このページをアンテナに追加 RSSフィード

2008-05-07

[]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.7はRuby 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)

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証