单例类中的Ruby attr_writer方法

时间:2015-09-08 17:27:24

标签: ruby

如果不以=结尾,我可以获得一个设置单例类中的实例变量的方法:

class Aaa
  class << self
    def config(&block)
      instance_eval(&block)
    end

    def set_blah(blah)
      @blah = blah
    end

    def blah
      @blah
    end
  end
end

Aaa.config {set_blah("something")}
Aaa.blah # => "something" as expected

当设置实例变量的方法以=结尾时,它不再起作用了:

class Bbb
  class << self
    def config(&block)
      instance_eval(&block)
    end

    def blah=(blah)
      @blah = blah
    end

    def blah
      @blah
    end
  end
end

Bbb.config {blah=("something")}
Bbb.blah # => nil, not sure why

# This works
Bbb.blah=("hi")
Bbb.blah # => "hi"

为什么set_blahblah=方法的工作方式不同?

1 个答案:

答案 0 :(得分:3)

只需调用blah=即可创建一个名为blah的局部变量,并为其赋值("something"),即"something"。您必须添加明确的接收器,例如:

self.blah=("something")