在 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