但是在Ruby裡面,我們定義私有方法的時候,呼叫self 方法卻會出錯!
為什麼呢?
看以下例子:
class Foo會出錯,錯誤訊息如下:
# 定義公開方法
def public_m
self.private_m # 呼叫私有方法
end
# 定義私有方法
private
def private_m
puts 'Hello'
end
end
Foo.new.public_m
d:/ac.rb:3:in `public_m': private method `private_m' called for #<Foo:0x00000002de19d8> (NoMethodError)
from d:/ac.rb:11:in `<main>'
等錯誤訊息。
原因出在,self 在呼叫自己的方法時,他也是一種公有方法,亦即為public方法,公有不能私自存取私有方法。所以只要把self移除即可。 如以下:
class Foo
# 定義公開方法
def public_m
private_m # 呼叫私有方法
end
# 定義私有方法
private
def private_m
puts 'Hello'
end
end
Foo.new.public_m #=> Hello
參考資料:
沒有留言:
張貼留言