浏览 3438 次
锁定老帖子 主题:请教Ruby中构造函数的问题
精华帖 (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里应该怎么实现,请各位大侠给的答案!! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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) |
|
返回顶楼 | |
发表时间:2008-07-02
还请@simohayha说明一下我上面那种写法失败的原因,还有代码instance_eval &block 与 method1 = Abc.new {} 有什么联系?谢谢!
|
|
返回顶楼 | |
发表时间:2008-07-02
ruby不支持方法重载,因为ruby是动态类型语言,所以方法重载可以通过缺省参数值来实现
|
|
返回顶楼 | |