okkez です。

自分も調べている最中です。
わかる部分だけコメントします。
# ほとんどわからない。。。

2009/01/29 16:36 akira yamada / やまだあきら <akira / arika.org>:
> 1.9.1-rc2のNEWSの内容についてのコメントと少し質問です。
>
(snip)
>
> to_splatメソッドはなさそうです(r14063で削除?)
>
>>           o New semantics for constant definition in instance_eval
>>             or in module_eval.
>
> (よくわかりませんでした。これについて何か情報はありませんでしょうか。)

以下のように、以前とは違って定数を定義するスコープが変わったようです。

class A
end

a = A.new
a.instance_eval{ B = 'constant B' }
A.module_eval{ C = 'constant C' }

B # => "constant B"                          # 1.8.7
  # => uninitialized constant B (NameError)  # 1.9.1
C # => "constant C"                          # 1.8.7
  # => uninitialized constant C (NameError)  # 1.9.1

(class << a ; self end)::B # => "constant B" # 1.9.1
A::C                       # => "constant C" # 1.9.1

a.instance_eval{ ::D = 'constant D' }
A.module_eval{ ::E = 'constant E' }

D # => "constant D" # 共通
E # => "constant E" # 共通

>
> 全体的に見て、メソッド名だけ書かれているのは
> 追加されたか変更(非互換ではなく機能追加?)があったか
> のどちらかのようでした。
> 可能ならそのどちらかだけでもわかるようになっていると
> よいなと思いました。

同意します。


-- 
okkez
okkez000 / gmail.com