ruby中的私有方法和保护方法

寻技术 Ruby编程 2023年11月01日 115

  ruby中的私有方法是指方法只能被隐含调用,不能被显示调用。而当没有显示接收者的时候,会把self当成接收者。因此,只能在自身中调用私有方法,这也是私有方法的调用规则。

  ruby的私有方法机制目的是:使得你很容易将方法分为两种,外部世界可以访问的方法和外部世界不可以访问的方法。

如下:

 class A
     def a
         self.method
     end
     def method
         p "hello world"
     end
     private :method
 end
 A.new.a

  method定义成私有方法,不能直接调用,只能通过a调用,但是方法a中是不能正常运行的。因为私有方法是要隐式调用的。去掉self就可以了。method的默认接收者就是A的实例对象,而method也是A的实例方法。

 

私有方法和单例方法的区别:

  单例方法是某个对象的方法,它属于这个对象,默认情况它是公有的,当然你也可以设置它为私有。

  私有的非单例方法,可以被任意数目的对象共享,但需要从合适的场合调用,是否可以调用私有方法的决定因素,不在于想要给哪个对象发送消息,而在于发送消息时哪个对象是self。

 

保护方法:

  保护方法调用规则:只要默认对象self和你想要调用的方法所属的对象是同一个类的实例,你就可以调用该保护方法。

  它的目的是让某个类的实例和该类的另一个实例协作完成某些任务。

如下:

 class A
     def initialize(n)
         @n = n
     end
     
     def n
         @n
     end
     
     def compare(c)
         if c.n > n 
             puts "The other object is bigger"
         else
             puts "THe other object is smaller"
         end
     end
     protected :n 
 end
 c1 = A.new(100)
 c2 = A.new(20)
 c1.compare(c2)

  这个程序是用来比较两个数的大小,它们都是同一个类的实例。因此用protected方法是合法的。

 

继承和私有方法

  子类继承父类的方法访问权限规则。如果类C有一组访问权限规则,且类D是C的子类,那么D的实例将表现出和C的实例一样的访问权限规则。但是,如果类D中定义设置了新的访问权限规则,这样,新的规则将优先于继承的规则。

关闭

用微信“扫一扫”