`

Ruby的 private protect public

    博客分类:
  • Ruby
 
阅读更多

原文:http://rubyer.me/blog/667/

重点关注private与protected

public

默认即为public,全局都可以访问,这个不解释

private

C++, “private” 意为 “private to this class”, 但是Ruby中意为 “private to this instance”.
意思是:C++中,对于类A,只要能访问类A,就能访问A的对象的private方法。
Ruby中,却不行:你只能在你本对象的实例中访问本对象的private方法。
因为Ruby的原则是“private意为你不能指定方法接收者”,接收者只能是self,且self必须省略!
所以Ruby中子类可以访问父类的private方法。但self.private_method是错的。

protected

可以在本类或子类中访问,不能在其它类中访问。

测试代码(public均可访问,代码略)

class A
  def test
    protected_mth
    private_mth

    self.protected_mth
    #self.private_mth     #wrong

    obj = B.new
    obj.protected_mth
    #obj.private_mth       #wrong
  end

  protected
  def protected_mth
    puts "#{self.class}-protected"
  end

  private
  def private_mth
    puts "#{self.class}-private"
  end
end

class B < A
  def test
    protected_mth
    private_mth

    self.protected_mth
    #self.private_mth     #wrong

    obj = B.new
    obj.protected_mth
    #obj.private_mth       #wrong
  end
end

class C
  def test
    a = A.new
    #a.protected_mth          #wrong
    #a.private_mth            #wrong
  end
end

A.new.test
B.new.test
C.new.test

注:ruby的访问控制不同于java,没有包的区别。
其它包中的类只要引用目标类,和目标类同包下类访问控制规则相同。

参考:http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Classes#Declaring_Visibility

分享到:
评论

相关推荐

    publicsuffix-ruby, 在 public 后缀列表中,基于 ruby的域名解析器.zip

    publicsuffix-ruby, 在 public 后缀列表中,基于 ruby的域名解析器 用于 ruby的public 后缀PublicSuffix是一个基于 public 后缀列表的ruby 域 NAME 解析器。 要求ruby&gt; = 2.1对于较老版本的ruby,使用以前的版本。...

    Ruby中的public、private、protected区别小结

    C++, “private” 意为 “private to this class”, 但是Ruby中意为 “private to this instance”. 意思是:C++中,对于类A,只要能访问类A,就能访问A的对象的private方法。 Ruby中,却不行:你只能在你本对象的...

    简单谈谈Ruby的private和protected

    Ruby作为一种动态类型的面向对象语言,提供了`public`、`protected`和`private`三种访问控制级别,分别对应不同的可见性和使用场景。本文将重点讨论`private`和`protected`两种访问控制修饰符,并通过示例代码来深入...

    Ruby-PublicActivity简单的活动跟踪模型类似于Github的公共活动

    标题中的“Ruby-PublicActivity简单的活动跟踪模型类似于Github的公共活动”揭示了我们要讨论的核心技术——PublicActivity。PublicActivity是Ruby编程语言中的一个开源库,它允许开发者轻松地在应用程序中实现活动...

    Ruby Ruby Ruby Ruby Ruby Ruby

    Ruby Ruby Ruby Ruby Ruby Ruby

    publicsuffix-ruby:基于公共后缀列表的Ruby域名解析器

    PublicSuffix是基于的Ruby域名解析器。 链接 要求 PublicSuffix需要Ruby&gt; = 2.3 。 对于较旧版本的Ruby,请使用早期版本。 安装 您可以手动安装gem: gem install public_suffix 或使用Bundler并将其定义为Gemfile...

    ruby DBI ruby DBI ruby DBI

    ruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ...

    Ruby-rubybuild编译和安装Ruby

    Ruby是一种动态、开源的编程语言,以其简洁、优雅的语法和强大的元编程能力著称。在Ruby开发中,为了管理不同版本的Ruby环境,我们常常会使用到`rbenv`和`ruby-build`这两个工具。本文将详细介绍如何使用`ruby-build...

    Ruby定义私有方法(private)的两种办法

    在Ruby编程语言中,私有方法(private methods)是一种特殊的方法,它们不能通过对象实例直接调用,只能在类或模块内部被其他方法间接调用。这种设计有助于防止意外的外部访问,保护对象的内部状态。以下是Ruby定义...

    Ruby完全自学手册 下

    《Ruby完全自学手册》是一本完全覆盖Ruby和Ruby on Rails的完全自学手册。《Ruby完全自学手册》的特色是由浅入深、循序渐进,注重理论和实践的结合。虽然定位为入门手册,但是依然涉及许多高级技术和应用,覆盖到的...

    ruby2ruby.zip

    ruby2ruby 提供一些用来根据 RubyParser 兼容的 Sexps 轻松生成纯 Ruby 代码的方法。可在 Ruby 中轻松实现动态语言处理。 标签:ruby2ruby

    Ruby-rubyinstall安装RubyJRubyRubiniusMagLevorMRuby

    Ruby是一种强大的、面向对象的脚本语言,广泛用于Web开发、服务器端编程和各种应用程序。在Ruby的世界里,管理不同的Ruby实现(如MRI、JRuby、Rubinius、MagLev和MRuby)是非常重要的,这有助于开发者根据项目需求...

    src-oepkgs/ruby-ruby2ruby

    src-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2...

    ruby源代码 ruby源代码 ruby源代码 ruby源代码2

    ruby源代码 ruby源代码 ruby源代码 ruby源代码2

    Ruby-Ruby的面向对象的枚举

    private_class_method :new end DaysOfWeek.each do |day| puts day end ``` 在这里,`values` 是Ruby类的实例方法,返回类的所有常量。通过`each` 方法,我们可以轻松地遍历枚举的所有值。 面向对象的枚举还...

    ruby源代码 ruby源代码 ruby源代码 ruby源代码4

    ruby源代码 ruby源代码 ruby源代码 ruby源代码4

    使用ruby解析awdb离线库

    使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库...

Global site tag (gtag.js) - Google Analytics