【问题标题】:instance_eval doesn't work with att_accessor?instance_eval 不适用于 att_accessor?
【发布时间】:2012-04-09 05:33:42
【问题描述】:

谁能告诉我,为什么这不起作用:

class A
  attr_accessor :b
end

a = A.new
a.instance_eval do
  b = 2
end

a.b
=> nil

我做错了什么?

【问题讨论】:

    标签: ruby block instance-eval


    【解决方案1】:

    罪魁祸首在于这部分代码:

    a.instance_eval do
      b = 2
    end
    

    虽然b = 2 是在您的实例的上下文中评估的,但它不会调用setter。相反,它只是在当前范围内创建一个名为 b 的新局部变量。要调用 setter,您必须进一步澄清您的代码以解决歧义:

    a.instance_eval do
      self.b = 2
    end
    

    【讨论】:

      【解决方案2】:

      变化:

      a.instance_eval do
        self.b = 2
      end
      

      【讨论】:

        猜你喜欢
        • 2014-01-29
        • 1970-01-01
        • 2012-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多