Ruby public private protected

public private protected 是定义在一个名为Module的类中的三个方法,限定了对方法的访问权限。

关键字 module class def 称为作用域门,出现这三个关键词时会发生作用域切换。

默认情况下 如果不声明,所有的方法都是public,在private 或者 protected后面都是private 或者 protected的方法。
同时也可以使用 public :demo, private :demo, protected :demo 的方式定义。

方法 initialize方法是private只能被new方法调用

  1. 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
  1. private 不能指定receiver 即使是self
    只能在方法中调用
  2. protected 在方法内部调用
    在方法中调用时可以指定 self
    在方法中相同类型的对象可以直接调用protected方法
  3. 在类的子类中 父类的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/]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,765评论 18 399
  • 小的时候特别希望可以有机会在很多人面前表演,成为那个焦点; 很希望大合唱中自己有机会变成领唱; 很希望在各种广播体...
    小Dew阅读 218评论 0 2
  • 文‖清微淡远一直很喜欢“灵气”二字,灵心慧性、气定神闲。
    玲珑雪阅读 632评论 0 0
  • 姓名:张献忠 日精进打卡第368天 【打卡始于2016.11.01持续于2017.11.03】 【知~学...
    张献忠阅读 149评论 0 0