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

时间:2014-08-22 13:22:40

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

此脚本会产生输出:

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

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

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

1 个答案:

答案 0 :(得分:3)

在ruby中,private方法只是一个无法使用显式接收器调用的方法,即.左侧的任何内容,self没有例外,除了对于setter方法(名称以=结尾的方法)

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

my_id()

对于私有的setter方法,即如果你有

def my_id=(val)
end

然后你不能让ruby通过添加parens来解析这个方法调用。你必须使用self.my_id=来将ruby解析为方法调用 - 这是&#34的例外;你不能用明确的接收者调用setter方法&#34;

相关问题