[英]Accessing Ruby Class Variables with class_eval and instance_eval
[英]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
訪問靜態var @@name
,或者如何從類外部分配值?
引發錯誤是因為MySelf.instance_eval('@@name')
正確引發了錯誤。 這不是實例變量,而是類變量。 您需要自己擁有MySelf.class_eval('@@name')
,然后它將起作用。
在此處檢查repl: https : //repl.it/Be0U/0
要設置類變量,請使用class_variable_set
如下所示:
MySelf.class_variable_set('@@name', 'graham')
我認為您必須使用類實例變量 。
class MySelf
@name = 'jonathan'
def self.name
@name
end
end
MySelf.instance_eval { @name } # => "jonathan"
MySelf.class_eval { @name } # => "jonathan"
試試吧,老兄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.