论坛首页 Ruby版 ruby

protected,private的问题

浏览 923 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-05-24 关键字: rotected,private的问题
 class C  
   def initialize(name)  
     @name = name  
   end  
   
   def compare(c)  
     name == @name  
   end  
   
   protected  
   def name  
     @name  
   end  
 end  
   
 class D < C  
   
 end  
   
 d1 = D.new("fankai")  
 d2 = D.new("hello")  
 d2.name
 puts d1.compare(d2) 

  

这样的调用出错了。。
protected method `name' called for #<D:0x2b389d4 @name="hello"> (NoMethodError)
是protected不能在类外部显式调用么?
   
最后更新时间:2007-05-24
我理解的是的,它只能由它的子类和本类的实例对象调用
要想外部调用必须声明为 public类型
   
0 请登录后投票
最后更新时间:2007-06-01
protected方法不能用于使用外部的一个receiver来调用message

我把楼主的代码做了以下修改就好了.

class C     
  def initialize(name)     
    @name = name     
  end     
     
  def compare(c)     
    name == @name     
  end     
     
  protected     
  def name     
    @name     
  end     
end     
     
class D < C     
   def name2(c)
    c.name
   end  
end     
     
d1 = D.new("fankai")     
d2 = D.new("hello")     
d2.name2(d2)   
puts d1.compare(d2) 
  


楼主可以参考这个帖子:
http://www.itpub.net/614179.html

phoenixlhan 写道
 class C  
   def initialize(name)  
     @name = name  
   end  
   
   def compare(c)  
     name == @name  
   end  
   
   protected  
   def name  
     @name  
   end  
 end  
   
 class D < C  
   
 end  
   
 d1 = D.new("fankai")  
 d2 = D.new("hello")  
 d2.name
 puts d1.compare(d2) 

  

这样的调用出错了。。
protected method `name' called for #<D:0x2b389d4 @name="hello"> (NoMethodError)
是protected不能在类外部显式调用么?
   
0 请登录后投票
论坛首页 Ruby版 ruby

跳转论坛:
JavaEye推荐