首页 > 代码库 > ruby中的私有方法和保护方法

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

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

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

如下:

 1 class A 2     def a 3         self.method 4     end 5     def method 6         p "hello world" 7     end 8     private :method 9 end10 A.new.a

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

 

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

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

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

 

保护方法:

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

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

如下:

 1 class A 2     def initialize(n) 3         @n = n 4     end 5      6     def n 7         @n 8     end 9     10     def compare(c)11         if c.n > n 12             puts "The other object is bigger"13         else14             puts "THe other object is smaller"15         end16     end17     protected :n 18 end19 c1 = A.new(100)20 c2 = A.new(20)21 c1.compare(c2)

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

 

继承和私有方法

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