Function overloading in Ruby
本问题已经有最佳答案,请猛点这里访问。
我有这段Ruby代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | class Superheros class<<self def foo1(param1) print"foo1 got executed " end def foo1 print"foo1 without param got executed " end def foo3(param1,param2) print"foo3 got executed " end end end print Superheros.foo3(2,3) print Superheros.foo1 print Superheros.foo1 print Superheros.foo1(5) |
我得到了EDOCX1中的错误(0)。但是我已经有了与之匹配的函数
为什么?ps:我发现如果不使用参数删除函数名,
Ruby不支持方法重载。在代码中,您对EDOCX1的第二个定义(0)取代了第一个定义。这就是为什么当你试图传递参数时会出错,接受参数的方法就不存在了。
关于这个问题,这里有一个问题,有一些很好的解释。
也许您可以使用变量参数:
1 2 3 4 5 6 7 8 9 10 | 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 |