代码之家  ›  专栏  ›  技术社区  ›  SeasonalShot

Ruby中的函数重载[重复]

  •  1
  • SeasonalShot  · 技术社区  · 11 年前

    我用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:我发现如果我删除了函数名 没有 参数, 这个 超级英雄.foo1(5) 工作正常。

    2 回复  |  直到 11 年前
        1
  •  3
  •   Community Mohan Dere    9 年前

    Ruby不支持方法重载。在代码中 foo1 替换了第一个。这就是为什么当你试图传递参数时会出现错误,接受参数的方法就不存在了。

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

        2
  •  1
  •   Adrián Fernández    11 年前

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

    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
    
    推荐文章