ルビは一定のアクセシビリティに関して数回の変更を受けたようです。 Ruby 1.9.2については、質問と回答hereに定数アクセシビリティに関する記述がありますが、そこに書かれている内容はもう真実ではありません。ルビー2.3定数のアクセシビリティはどのようにして決まりますか?
、私はクラスで定義された定数がある場合:
class A
Foo = :a
end
を私はinstance_eval
又はclass_eval
を介してアクセスすることができない。
A.new.instance_eval{Foo} # => error
A.class_eval{Foo} # => error
A.instance_eval{Foo} # => error
Iクラス本体からアクセスすることができるが:
class A; Foo end # => :a
Ruby 2.3の定数アクセシビリティはどのように機能しますか?可能であれば、Rubyにおける定数アクセシビリティの歴史的変化とそれらにつながった議論について説明してください。
また、A.const_get:Foo#=>:a'と 'A.class_eval" Foo " =>:a'(2.3)です。 –
@CarySwoveland権利。しかし、それらは文字列/シンボルから解析する 'eval'変種の実用的/中核的使用によく似ています。特に、 'const_get'はそれを行うために正確に設計されています。もしそれがうまくいかなければ、それは大きな問題になるでしょう。 – sawa
私はこの問題をルビパーサーに対処しています。定数ルックアップではありません。 BTW 2.1は2.3のように動作します。とにかく: 'A.instance_eval {| a | aインスタンスはFooのインスタンスであり、AインスタンスはFooのインスタンスである。後者の2つは同じように動作する必要があります。そのためパーサを責めます。 – mudasobwa