[#44904] [ruby-trunk - Bug #5688][Open] Solaris10 で spawn を繰り返すとメモリリークする — okkez _ <redmine@...>

14 messages 2011/11/29

[ruby-dev:44907] [ruby-trunk - Bug #5689] class variables inside of instance methods inside of "class_eval"

From: Shugo Maeda <redmine@...>
Date: 2011-11-30 04:14:05 UTC
List: ruby-dev #44907
Issue #5689 has been updated by Shugo Maeda.


Shyouhei Urabe wrote:
> インスタンスメソッドの中から他のクラスのクラス変数が見えるというのはいかにもまずそうに思うのですが、以下の挙動は意図的ですか。
> 
> 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'

module_evalは定数同様にクラス変数の探索にも影響しないので、意図的では
あるんじゃないでしょうか。
定数探索の動作を1.8と同じに戻した時の議論で、クラス変数をどうするかも
議論した上で、合わせて1.8の動作に戻したように記憶しています。

ただ、今の動作が望ましいかどうかは議論の余地があると思います。

----------------------------------------
Bug #5689: class variables inside of instance methods inside of "class_eval"
http://redmine.ruby-lang.org/issues/5689

Author: Shyouhei Urabe
Status: Open
Priority: Normal
Assignee: 
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2011-11-30 trunk 33904) [x86_64-linux]


インスタンスメソッドの中から他のクラスのクラス変数が見えるというのはいかにもまずそうに思うのですが、以下の挙動は意図的ですか。

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



-- 
http://redmine.ruby-lang.org

In This Thread