【问题标题】:What does "wrong number of arguments (1 for 0)" mean in Ruby?“错误数量的参数(1 对 0)”在 Ruby 中是什么意思?
【发布时间】:2020-09-16 22:31:30
【问题描述】:

“Argument Error: wrong number of arguments (1 for 0)”是什么意思?

【问题讨论】:

    标签: ruby


    【解决方案1】:

    定义函数时,还定义了该函数需要哪些信息(参数)才能工作。如果它被设计为在没有任何额外信息的情况下工作,并且你传递了一些信息,你就会得到那个错误。

    示例: 不接受任何参数:

    def dog
    end
    

    接受参数:

    def cat(name)
    end
    

    当你调用这些时,你需要使用你定义的参数来调用它们。

    dog                  #works fine
    cat("Fluffy")        #works fine
    
    
    dog("Fido")          #Returns ArgumentError (1 for 0)
    cat                  #Returns ArgumentError (0 for 1)
    

    查看Ruby Koans 了解这一切。

    【讨论】:

    • -1 Cat.new("Fluffy") 不能正常工作。它给出“未初始化的常量 Cat”,Cat().new("Fluffy") 给出“ArgumentError: wrong number of arguments (0 for 1)”。
    • 旨在更简单的视觉表示来解释什么是参数错误。但是,如果您担心,请解决它。
      其他答案可能在技术上更有效,但对于像“什么是 ArgumentError?”这样基本的问题可能没有帮助。
    • @bennett_an 感谢您提供 Ruby Koans 的链接,看起来很有趣。
    【解决方案2】:

    您将一个参数传递给了一个不带任何参数的函数。例如:

    def takes_no_arguments
    end
    
    takes_no_arguments 1
    # ArgumentError: wrong number of arguments (1 for 0)
    

    【讨论】:

      【解决方案3】:

      我假设你调用了一个带有参数的函数,该参数是在没有任何参数的情况下定义的。

      def f()
        puts "hello world"
      end
      
      f(1)   # <= wrong number of arguments (1 for 0)
      

      【讨论】:

        【解决方案4】:

        如果您从使用带一个参数的 lambda 更改为带一个参数的函数,则会收到此错误。

        例如:

        你有:

        foobar = lambda do |baz|
          puts baz
        end
        

        你把定义改成了

        def foobar(baz)
          puts baz
        end
        

        你的调用是:

        foobar.call(baz)
        

        然后你收到了消息

        ArgumentError: wrong number of arguments (0 for 1)
        

        当你真正的意思是:

        foobar(baz)
        

        【讨论】:

          猜你喜欢
          • 2019-04-25
          • 1970-01-01
          • 2018-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多