为什么我不能混合模块中的赋值方法



假设我有一个这样的模块:

module MyAssigments
  def dummy_assignment=(value)
    puts "it's not assigned #{value}"
  end
end

以及包含它的类,如下所示:

class MyClass
  include MyAssigments
  def x=(value)
     dummy_assignment=(value)
  end
end

然后

o = MyClass.new
o.x="anything"

不会在屏幕上打印任何内容,为什么?

Ruby 在这里有一个语法/配对怪癖:使用 assginemnt 方法进行self必须显式限定,因此:

  def x=(value)
     self.dummy_assignment=value
  end

如果没有self.部分,Ruby 假定它是对局部变量的赋值。

最新更新