トップ «前の日記(2009-12-07 (Mon)) 最新 次の日記(2009-12-24 (Thu))» 編集   RSS 1.0 FEED  

Journal InTime


2009-12-10 (Thu) [長年日記]

_ instance_eval/class_evalの仕様変更

Ruby 1.9で変更されていた、instance_eval/class_evalのブロック内での定数・クラス変数の探索時の挙動を1.8の挙動に戻した(r25984)。 たとえば、class_evalの場合、レシーバが探索対象に含まれなくなったので注意してください。

1.9の新しい挙動の方が一貫性があってわかりやすいと思っていたが、メタプログラミングではレシーバに何が来るかわからないことが多く、定数名の衝突が問題になるため、Yehuda Katzの強い要望で結局元に戻すことになった。これで、Railsの1.9対応が加速するかも?

また、ブロックパラメータについても、1.8同様にレシーバが渡されるようになった(r26062)。

ちなみに、Yehuda Katzがしきりに定数のスコープをlexicalと言っているが、厳密にはlexicalじゃないと思う(わかった上でわかりやすさを優先してそう言ってるだけかもしれないけど)。

Tags: Ruby