2008-07-02
请教Ruby中构造函数的问题
我刚学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里应该怎么实现,请各位大侠给的答案!!
评论
ye_jian_hui
2008-07-02
ruby不支持方法重载,因为ruby是动态类型语言,所以方法重载可以通过缺省参数值来实现
kevin_gzhz
2008-07-02
还请@simohayha说明一下我上面那种写法失败的原因,还有代码instance_eval &block 与 method1 = Abc.new {} 有什么联系?谢谢!
simohayha
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) 发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 4244 次
- 性别:


- 详细资料
搜索本博客
最新评论
-
请教如何在freemarker中写 ...
推荐去问答频道提问
-- by JavaEye管理员 -
如何不用struts2的ajax框 ...
已经解决了,方法如下: function sendURL(userAccount ...
-- by kevin_gzhz -
请教Ruby中构造函数的问题
ruby不支持方法重载,因为ruby是动态类型语言,所以方法重载可以通过缺省参数 ...
-- by ye_jian_hui -
请教Ruby中构造函数的问题
还请@simohayha说明一下我上面那种写法失败的原因,还有代码instanc ...
-- by kevin_gzhz -
请教Ruby中构造函数的问题
你可以这样来写: class Abc attr_accessor :na ...
-- by simohayha






评论排行榜