通过重载可以做多态吗?

时间:2016-06-06 16:52:36

标签: ruby polymorphism

我正在尝试执行以下操作:

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_sum方法由具有两个输入的那个重新定义。

2 个答案:

答案 0 :(得分:2)

如果添加的是你之后的,你可以更简单地做到:

def add(*numbers)
  numbers.inject(&:+)
end

add(1) # => 1
add(1, 3, 5) # => 9

如果您正在寻找一个更通用的解决方案来解决如何提供依赖于参数数量的行为的问题,那么您可以在签名中使用*args,然后根据{{1}进行分支}:

args.size

答案 1 :(得分:0)

我和@keith-bennett的反应相同。但我不知道它就像他的回答一样简单。这是我的解决方案:

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