论坛首页 编程语言技术论坛

ruby的method作用域

浏览 1805 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-03  
ruby的method作用域和Java一样,修饰词都有private,protected和public。其中public的含义都是一样的,但是private和protected却完全不一样。这一点在《Programming ruby》当中语焉不详。今天看了《ruby for rails》第7章才搞明白了。

一、Java当中的含义:
private在Java当中的含义是只在当前类范围之内可以调用,当前类的子类也无法访问;
protected在Java当中的含义是在当前类以及子类当中可以调用,其他类无法访问;

二、Ruby当中的含义:
private在某种程度上相当于Java当中的protected,当前类以及子类都可以调用,其他类无法访问,但也有点不同,即private方法只能被当前对象隐式调用(self.),不能被显式调用,换句话说,就是private方法不能跨同一个类的不同实例来调用;

protected稍微宽泛一点,指可以调用同一个类别的其他实例方法,也就是说,protected方法可以显式调用(obj.),例如:

class C
  def initialize(name)
    @name = name
  end

  def compare(c)
    c.name == @name
  end

  protected
  def name
    @name
  end
end

class D < C
end

d1 = D.new("fankai")
d2 = D.new("hello")

puts d1.compare(d2)


在类别C当中使用c.name,如果name方法是private的话,只能使用
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics