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

请教Ruby中构造函数的问题

浏览 3438 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-07-02  

 

      我刚学Ruby没有几天,有个问题想请教一下高手:有学习资料说Ruby里没有方法的重载这一说法。不过我现在遇到这个需要像在java里写多个构造器的情况下该怎么实现。

class Abc
  #1
   def initialize()  
   end 
  #2
  def initialize(name, &block)  
    @name = name 
    @block = block 
  end  
  
   def getText
        "this is test"
   end

   def getTax(amount)  
    "#@name on #{amount} = #{ @block.call(amount) }"  
  end  
end

#3
method1 = Abc.new()
method1.getText

#4
method2 = Abc.new("Sales tax") { |amt| amt * 0.075 } 
puts method2.getTax(100)  

   为什么代码块#1和#2同时存在时,#3可以执行,#4就不可以,只存在#2和#4时,#4就可以执行,要在同一个类中实现像java那样的通过不同的构造器构造不同的实例,在Ruby里应该怎么实现,请各位大侠给的答案!!

   发表时间:2008-07-02  
你可以这样来写:

class Abc
  attr_accessor :name,:block
   def initialize(&block)  
    instance_eval &block  
   end 
  #2
  
   def getText
        "this is test"
   end

   def getTax(amount)  
    "#@name on #{amount} = #{ @block.call(amount) }"  
  end  
end

#3
method1 = Abc.new {}
p method1.getText

#4
method2 = Abc.new do
  self.name="Sales tax"
  self.block=proc { |amt| amt * 0.075 }  
end
p method2.getTax(100)  
2 请登录后投票
   发表时间:2008-07-02  
还请@simohayha说明一下我上面那种写法失败的原因,还有代码instance_eval &block      与 method1 = Abc.new {}   有什么联系?谢谢!
0 请登录后投票
   发表时间:2008-07-02  
ruby不支持方法重载,因为ruby是动态类型语言,所以方法重载可以通过缺省参数值来实现
0 请登录后投票
论坛首页 编程语言技术版

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