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
可用于避免名称与局部变量冲突,表示我想调用实例函数或引用实例变量。
答案 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;