[ruby-list:50641] 特異クラスでのクラス変数
From:
Akret Node <node.akret@...>
Date:
2018-01-07 17:15:35 UTC
List:
ruby-list #50641
のぐちと申します。
特異クラスの中でクラス変数を定義した場合に
クラスと共有する理由はなんでしょうか??
class C
class << self
FOO = "foo"
@@bar = "bar"
@bazz = "bazz"
end
end
p C.const_get :FOO # 例外
p C.singleton_class.const_get :FOO # "foo"
p C.class_variable_get :@@bar # "bar"
p C.singleton_class.class_variable_get :@@bar # "bar"
p C.instance_variable_get :@bazz # nil
p C.singleton_class.instance_variable_get :@bazz # "bazz"
また、class << 構文をトップレベルに書いた場合に
クラス変数を定義するとトップレベル(Object)に定義するようです。
一寸、レキシカルに決定しているように見えますが
class << 構文はレキシカルスコープを別途つくりますよね?
val = 10
class << Object
p val # ブロックのようにはならず例外が発生する
end
この動作は若干、混乱するのですがこの構文解釈にいたった経緯はなんでしょう?