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
我在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