Is it possible to do polymorphism by doing overloading?
本问题已经有最佳答案,请猛点这里访问。
我正在尝试执行以下操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 | class SUM def make_sum (number) return number+number end def make_sum (number_a, number_b) return number_a+number_b end end operation = SUM.new operation.make_sum(5) # returns 10 operation.make_sum(2, 3) # returns 5 |
一个输入的make和方法由两个输入的make和方法重新定义。
如果添加的是您想要的,您可以更简单地做到:
1 2 3 4 5 6 | def add(*numbers) numbers.inject(&:+) end add(1) # => 1 add(1, 3, 5) # => 9 |
如果您正在寻找一个更通用的解决方案来解决如何根据参数数量提供行为的问题,那么在签名中使用
1 2 3 4 5 6 7 8 9 10 | def foo(*args) case args.size when 1 # do something when 2 # do something else when (3..5) # do another thing end end |
号
我和@keith bennett有同样的反应。但我不知道这和他的回答一样简单。我的解决方案是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class Foo def self.add(*args) r = 0 if args.length > 1 args.each { |a| r += a.to_i } else r += (args[0].to_i + args[0].to_i) end return r end end f = Foo puts f.add(1, 2) # => 3 puts f.add(1) # => 2 |