public private protected 是定義在一個名為Module的類中的三個方法,限定了對方法的訪問權限。
關鍵字 module class def 稱為作用域門,出現這三個關鍵詞時會發生作用域切換。
默認情況下 如果不聲明,所有的方法都是public,在private 或者 protected后面都是private 或者 protected的方法。
同時也可以使用 public :demo, private :demo, protected :demo 的方式定義。
方法 initialize方法是private只能被new方法調用
- private 和 protected 方法不能在對象實例上直接調用
class Product
def initialize(name)
@name = name
end
def show
@name
end
private
def sku
(1..5).to_a.join
end
protected
def color
'red'
end
end
r_p1.png
- private 不能指定receiver 即使是self
只能在方法中調用 - protected 在方法內部調用
在方法中調用時可以指定 self
在方法中相同類型的對象可以直接調用protected方法 - 在類的子類中 父類的private protected可以被調用但是仍舊遵循上面的規則
(參考一)[http://culttt.com/2015/06/03/the-difference-between-public-protected-and-private-methods-in-ruby/]
(參考二)[http://kaochenlong.com/2011/07/26/public-protected-and-private-method-in-ruby/]