Ruby 之 class 中的 private、 protected、public

Private

     private权限的函数只能在本对象的成员函数中访问到。也就是这个函数只是这个对象的实现细节

对象实例变量(@instance_attribute)的访问权限就是 private。

class A

   private
    def test_access

      @instance_attribute = "instance_attribute";
      return "test access right" 
    end 
  end

class B < A

   def test

       puts test_access;

       puts @instance_attribute;

   end

   def test_other(a)

       a.test_access

   end

end 
B.new.test          # =>  test access right

                         # =>  instance_attribute

  p A.new.test_private    #错误test.rb:20: private method `test_access' called for #<A:0x3fd9064> (NoMethodError)

B.new.test_other(A.new) #错误test.rb:18: in `test_other': private method `test_access' called for #<A:0x4198850> (NoMethodError) from test.rb:24

 

Protected

     protected 权限的函数只能在被本类或子类的 上下文中调用,但可以使用 other_object.function的形式。

这个的关键是可以调用 本类的其它对象的protected函数。

  # Now make 'test' protect

  class B
      protected    :test_access
  end

  p A.new.test_access            # 错误 private method 'test_access'
  B.new.test                          # test access right

  p B.new.test_other(B.new)   # test access right

  p B.new.test_other(A.new)  # 错误 private method 'test_access'

 

Public

     public 函数可以在任何地方调用。成员函数和常量的默认访问权限就是public。

 

总结:

     public, protected, private 效果上像是触发器,调用了一次,就改变了后续类成员的访问权限,这个和C++中情况很像。

posted @ 2009-11-26 14:47  napoleon_liu  阅读(1204)  评论(0编辑  收藏  举报