簡體   English   中英

為什么`instance_eval` /`class_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM