Ruby:使用self关键字从内部调用私有方法

Pau*_*aul 10 ruby self private-members

class MyClass
  def test
    puts my_id
    puts self.my_id
  end

  private

  def my_id
    115
  end
end

m = MyClass.new
m.test
Run Code Online (Sandbox Code Playgroud)

该脚本产生一个输出:

115
priv.rb:4:in `test': private method `my_id' called for #<MyClass:0x2a50b68> (NoMethodError)
    from priv.rb:15:in `<main>'
Run Code Online (Sandbox Code Playgroud)

使用self关键字调用内部方法与没有关键字之间有什么区别?

从我的Delphi和C#体验:没有区别,self可以用来避免名称与局部变量冲突,表示我想调用实例函数或引用实例变量.

Fre*_*ung 4

在 ruby​​ 中,private方法只是一个不能用显式接收者调用的方法,即使用 左边的任何内容.,也不例外self,除了 setter 方法(名称以 结尾的方法=

要消除非 setter 方法调用的歧义,您还可以使用括号,即

my_id()
Run Code Online (Sandbox Code Playgroud)

对于私有 setter 方法,即如果您有

def my_id=(val)
end
Run Code Online (Sandbox Code Playgroud)

那么你不能通过添加括号让 ruby​​ 将其解析为方法调用。您必须使用self.my_id=ruby​​ 将其解析为方法调用 - 这是“您不能使用显式接收器调用 setter 方法”的例外