2.6Ruby语言的可见性(Visibility)

在Ruby语言中,可见性可以是公开(public)私有(private)被保护的(protected)

1.类变量、实例变量、常量

可见性不可以应用于类变量、实例变量、常量,类变量、实例变量默认是private的,常量默认是public的。

2.实例方法

可见性可以应用实例方法。

如果没有明确声明为privateprotected,方法的默认可见性是public的。一个例外是initialize方法,它总是默认为private;另外一个例外是所有在类外定义的“全局”方法——这些方法被定义为Object对象的private实例方法,但对于类来说这些是public方法,可以在任何地方被调用,对它们的使用没有任何限制。

私有(private)方法只能被这个类(或它的子类)的实例方法所调用。私有方法只能隐式地被self对象调用,并且不能通过一个对象进行显式调用。如果m是一个私有方法,那么只能用m这种方式来调用它,而不能用o.mself.m来调用它。

被保护(protected)方法与私有(private)方法的相似之处是只能被这个类(或它的子类)的实例方法所调用,不同之处在于,不仅仅可以被self对象隐式调用,还可以被该类的实例显式调用。

如果不使用参数,它们把所有紧跟的方法用给定的可见性定义。

您可能认为 another_method 是公有的,并不是这样的,”private” 权限声明会一直应用到类声明底部, 或者直到另外一个权限声明开始起作用。

class MyClass
  private
  def a_method; true; end
  def another_method; false; end
end

如果使用一个或多个方法名(符号)作为参数,这种用法要求可见性的声明必须在该方法的定义之后,通常在类的末尾处一次性声明private方法和protected方法。

class Widget
  def x
    @x
  end
  protected :x

  def utility_method
    nil
  end
  private :utility_method
end

3.类方法

可见性可以应用类方法。

#将new公开类方法转换成私有类方法
private_class_method :new
#将new私有类方法转换成公开类方法
public_class_method :new

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/ruby/rubylang/19293.html

(0)
上一篇 2023年1月6日 15:24
下一篇 2023年1月7日 01:16

相关推荐

  • 1.6Ruby语言的方法(Method)

    1.方法声明 2.方法分类 2.1类方法 接收者不是对象而是类本身的方法。 2.2实例方法 以对象为接收者的方法。 上面的对象被称为接收者(receiver)。调用方法被称为“向对象发送消息(message)”,调用的结果是“对象接收(receive)了消息”。也就是说,方法的调用就是把几个参数组成的消息一起发送给对象…

    Ruby语言教程 2022年12月6日
    09300
  • 2.1Ruby语言的模块(Module)

    模块是方法、常量、类变量的集合。 1.模块声明 2.场景一:混入(mixin) 在定义类时可以使用include混入模块,就可以得到模块中的所有方法、常量、类变量。 像上述代码那样,虽然有点类似于类的继承,但mix-in可以更加灵活地解决下面的问题。 3.场景二:命名空间(namespace) 无论是方法名还是类名,当…

    Ruby语言教程 2023年1月1日
    07480
  • 2.2Ruby语言的类(Class)

    1.类声明 类 总是以关键字 class 开始,后跟类的名称。 2.继承 Ruby语言只提供单继承,就是说1个子类不可以继承多个父类,只可以继承1个父类,可以用mix-in的方式引入模块从而支持“多继承”的效果。 Class是Module的子类,Module是Object的子类,Object是Bas…

    Ruby语言教程 2023年1月2日
    07480

发表回复

登录后才能评论