2015年11月1日 星期日

[Note] 關於 private method 私有方法在Ruby的使用方式

關於private 方法,是指只有在自己類別內才可以使用

但是在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


參考資料:

1.Understanding private methods in Ruby - stackoverflow

沒有留言:

張貼留言