ruby - 是否可以通过重载来实现多态?

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

最佳答案

如果添加是您想要的,您可以更简单地执行以下操作:

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

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

如果您正在寻找更通用的解决方案来解决如何提供依赖于参数数量的行为,那么您可以在签名中使用 *args ,然后基于 args.size:

def foo(*args)
   case args.size
     when 1
        # do something
     when 2
        # do something else
     when (3..5)
        # do another thing
   end
 end

关于ruby - 是否可以通过重载来实现多态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37662905/

相关文章:

Java 不允许我在伞类下声明对象(多态性)

haskell - 什么是单态性限制?

c++ - 如何像编译器一样获取每一个虚函数索引?

ruby-on-rails - ruby on rails教程第3.2节rspec测试报错

ruby - 如何每小时执行一个函数并将结果添加到 Rails 中的数据库中?

mysql - Rails 按 Facebook 喜欢程度排序

c++ - 虚拟基类析构函数调用顺序?

c# - 多态方法不适用于 C# 4

Ruby Net::HTTP 不解码 gzip?

ruby - 如何使用 RuboCop 强制使用三元括号?