1

我在 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)效果很好。

4

2 回答 2

3

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

这里有一个关于这个主题的问题有一些很好的解释。

于 2015-03-11T01:08:55.300 回答
1

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

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
于 2015-03-11T09:22:55.500 回答