为什么 `instance_eval`/`class_eval` 无法访问 class 变量?
Why is `instance_eval`/`class_eval` not able to access class variables?
class MySelf
@@name = 'jonathan'
def self.name
@@name
end
end
MySelf.instance_eval {@@name}
MySelf.class_eval {@@name}
同时抛出:
NameError: uninitialized class variable @@collection in Object
但是
MySelf.instance_eval {name}
MySelf.class_eval {name}
两者都有效。
如何使用 instance_eval
/class_eval
访问静态变量 @@name
,或者如何从 class 外部赋值?
我认为你必须使用 class 实例变量.
class MySelf
@name = 'jonathan'
def self.name
@name
end
end
MySelf.instance_eval { @name } # => "jonathan"
MySelf.class_eval { @name } # => "jonathan"
请尝试一下。
抛出的错误是因为MySelf.instance_eval('@@name')
正确抛出了错误。这不是一个实例变量,它是一个 class 变量。你会想要自己拥有 MySelf.class_eval('@@name')
,然后它就会起作用。
在此处查看回复:https://repl.it/Be0U/0
要设置 class 变量,请像这样使用 class_variable_set
:
MySelf.class_variable_set('@@name', 'graham')
class MySelf
@@name = 'jonathan'
def self.name
@@name
end
end
MySelf.instance_eval {@@name}
MySelf.class_eval {@@name}
同时抛出:
NameError: uninitialized class variable @@collection in Object
但是
MySelf.instance_eval {name}
MySelf.class_eval {name}
两者都有效。
如何使用 instance_eval
/class_eval
访问静态变量 @@name
,或者如何从 class 外部赋值?
我认为你必须使用 class 实例变量.
class MySelf
@name = 'jonathan'
def self.name
@name
end
end
MySelf.instance_eval { @name } # => "jonathan"
MySelf.class_eval { @name } # => "jonathan"
请尝试一下。
抛出的错误是因为MySelf.instance_eval('@@name')
正确抛出了错误。这不是一个实例变量,它是一个 class 变量。你会想要自己拥有 MySelf.class_eval('@@name')
,然后它就会起作用。
在此处查看回复:https://repl.it/Be0U/0
要设置 class 变量,请像这样使用 class_variable_set
:
MySelf.class_variable_set('@@name', 'graham')