在 Singleton 類中訪問 InstanceClass 變數
Singleton 類與其物件共享其例項/類變數。
class Example
@@foo = :example
end
def Example.foo
class_variable_get :@@foo
end
Example.foo #=> :example
class Example
def initialize
@foo = 1
end
def foo
@foo
end
end
e = Example.new
e.instance_eval <<-BLOCK
def self.increase_foo
@foo += 1
end
BLOCK
e.increase_foo
e.foo #=> 2
塊關閉其例項/類變數目標。使用 class_eval
或 instance_eval
中的塊訪問例項或類變數是不可能的。將字串傳遞給 class_eval
或使用 class_variable_get
解決問題。
class Foo
@@foo = :foo
end
class Example
@@foo = :example
Foo.define_singleton_method :foo do
@@foo
end
end
Foo.foo #=> :example