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
可以用来避免名称与局部变量冲突,表示我想调用实例函数或引用实例变量.
在 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 方法”的例外
归档时间: |
|
查看次数: |
753 次 |
最近记录: |