Bug #5689
closedclass variables inside of instance methods inside of "class_eval"
Description
インスタンスメソッドの中から他のクラスのクラス変数が見えるというのはいかにもまずそうに思うのですが、以下の挙動は意図的ですか。
zsh % ~/target/trunk/bin/ruby -ve'
class Klass
@@cvar = "Klass"
end
Klass.module_eval do
def cvar
@@cvar
end
end
@@cvar = "main"
puts Klass.new.cvar'
ruby 2.0.0dev (2011-11-30 trunk 33904) [x86_64-linux]
-e:12: warning: class variable access from toplevel
-e:8: warning: class variable access from toplevel
main
Updated by shugo (Shugo Maeda) almost 13 years ago
Shyouhei Urabe wrote:
インスタンスメソッドの中から他のクラスのクラス変数が見えるというのはいかにもまずそうに思うのですが、以下の挙動は意図的ですか。
zsh % ~/target/trunk/bin/ruby -ve'
class Klass
@@cvar = "Klass"
endKlass.module_eval do
def cvar
@@cvar
end
end@@cvar = "main"
puts Klass.new.cvar'
module_evalは定数同様にクラス変数の探索にも影響しないので、意図的では
あるんじゃないでしょうか。
定数探索の動作を1.8と同じに戻した時の議論で、クラス変数をどうするかも
議論した上で、合わせて1.8の動作に戻したように記憶しています。
ただ、今の動作が望ましいかどうかは議論の余地があると思います。
Updated by matz (Yukihiro Matsumoto) almost 13 years ago
- ruby -v changed from ruby 2.0.0dev (2011-11-30 trunk 33904) [x86_64-linux] to -
まつもと ゆきひろです
In message "Re: [ruby-dev:44907] [ruby-trunk - Bug #5689] class variables inside of instance methods inside of "class_eval""
on Wed, 30 Nov 2011 13:14:05 +0900, Shugo Maeda redmine@ruby-lang.org writes:
|module_evalは定数同様にクラス変数の探索にも影響しないので、意図的では
|あるんじゃないでしょうか。
|定数探索の動作を1.8と同じに戻した時の議論で、クラス変数をどうするかも
|議論した上で、合わせて1.8の動作に戻したように記憶しています。
意図的です。ので、これは少なくともバグではありません。
|ただ、今の動作が望ましいかどうかは議論の余地があると思います。
そうですね。「module_evalは定数(やクラス変数)の探索先を変えて
しまったほうが良い」という考えは当然ありえると思いますし、実
際にそう期待している人もそれなりにいるようです。
そのように帰るべきだと考える場合にはfeature proposalとして提
案してください。
Updated by shugo (Shugo Maeda) almost 13 years ago
前田です。
2011年11月30日15:01 Yukihiro Matsumoto matz@ruby-lang.org:
|ただ、今の動作が望ましいかどうかは議論の余地があると思います。
そうですね。「module_evalは定数(やクラス変数)の探索先を変えて
しまったほうが良い」という考えは当然ありえると思いますし、実
際にそう期待している人もそれなりにいるようです。そのように帰るべきだと考える場合にはfeature proposalとして提
案してください。
たぶんwycatsが反対すると思うので、feature proposalはruby-coreに
出してもらった方がよいと思います。
個人的には、定数は現在のままで、クラス変数はmodule_evalなどの
影響を受ける、という線はアリかなという気がします。
クラス変数に静的スコープっぽい挙動を求める人はあまりいないと
思いますので。
--
Shugo Maeda
Updated by ko1 (Koichi Sasada) over 12 years ago
- Status changed from Open to Rejected