在Ruby语言中,可见性可以是公开(public)、私有(private)或 被保护的(protected)。
1.类变量、实例变量、常量
可见性不可以应用于类变量、实例变量、常量,类变量、实例变量默认是private
的,常量默认是public
的。
2.实例方法
可见性可以应用实例方法。
如果没有明确声明为private
或protected
,方法的默认可见性是public
的。一个例外是initialize
方法,它总是默认为private
;另外一个例外是所有在类外定义的“全局”方法——这些方法被定义为Object
对象的private
实例方法,但对于类来说这些是public
方法,可以在任何地方被调用,对它们的使用没有任何限制。
私有(private
)方法只能被这个类(或它的子类)的实例方法所调用。私有方法只能隐式地被self
对象调用,并且不能通过一个对象进行显式调用。如果m是一个私有方法,那么只能用m
这种方式来调用它,而不能用o.m
或self.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