Ruby 中的函数重载

Function overloading in Ruby

我在Ruby中有这段代码。

class Superheros
class<<self

    def foo1(param1)
        print "foo1 got executed\n"
    end

    def foo1
        print "foo1 without param got executed\n"
    end
    def foo3(param1,param2)
        print "foo3 got executed\n"
    end
end
end

print Superheros.foo3(2,3) 
print Superheros.foo1
print Superheros.foo1 
print Superheros.foo1(5)

我在 Superheros.foo1(5) 中收到错误。但是我已经有函数 foo1(param1) 来匹配它,但是它给了我一个错误 `foo1': wrong number of arguments (1 for 0) (ArgumentError)

这是为什么? PS:我发现如果我删除函数名称 而没有 参数, Superheros.foo1(5) 工作得很好。

Ruby 不支持方法重载。在您的代码中,您对 foo1 的第二个定义替换了第一个。这就是为什么当您尝试传递参数时出现错误,接受参数的方法消失了。

SO 上有一个关于这个主题的问题 here,有一些很好的解释。

也许你可以使用可变参数:

def foo1(*args)
  case args.length
    when 1
      puts "Function A"
    when 2
      puts "Function B"
    else
      puts "Called with #{args.length} arguments"
  end
end