为什么`instance_eval` /`class_eval`无法访问类变量?

时间:2016-01-17 00:04:24

标签: ruby 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}

都工作。

如何使用@@name / instance_eval访问静态变量class_eval,或者如何从类外部分配值?

2 个答案:

答案 0 :(得分:0)

抛出的错误是因为MySelf.instance_eval('@@name')正确抛出错误。这不是一个实例变量,它是一个类变量。您希望MySelf.class_eval('@@name')拥有class_variable_set,然后它就可以使用。

在此处查看repl:https://repl.it/Be0U/0

要设置类变量,请使用 MySelf.class_variable_set('@@name', 'graham') ,如下所示:

def closestmatch(x, y):
   val = np.abs(x-y)
   return(val.min()>=3)

答案 1 :(得分:-1)

我认为你必须使用类实例变量

class MySelf
  @name = 'jonathan'

  def self.name
    @name
  end
end

MySelf.instance_eval { @name } # => "jonathan"
MySelf.class_eval { @name }    # => "jonathan"

试试吧,PLZ。