Ruby中的函数重载

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)。但是我已经有了与之匹配的函数foo1(param1),但是它给了我一个错误埃多克斯1〔2〕

为什么?ps:我发现如果不使用参数删除函数名,Superheros.foo1(5)工作得很好。


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