繁体   English   中英

一个简单的 Ruby 函数的“ArgumentError(参数数量错误(给定 2,预期为 1))”

[英]"ArgumentError (wrong number of arguments (given 2, expected 1))" for a simple Ruby function

所以我正在编写一个简单的 Ruby 程序,本质上是一个简单的 ORM。 在我的“删除”方法中,我写了以下内容:

file = "/Users/john/Projects/csv-orm/20180922-test.csv"

def delete id
  counter = 0
  csv = []

  CSV.foreach(file) do |row|
    counter += 1
    if counter != id
      csv << row
    end
  end

  counter = 0

  CSV.foreach(file, "w") do |row|
    row = csv[counter]
  end
end

delete 2

...我正在我的终端(Mac OS X 10.13,ruby 2.5.1p57(2018-03-29 修订版 63029)[x86_64-darwin17])上的 irb 会话中运行它来测试它(例如,通过粘贴在上面的代码中,然后尝试delete 2 ,其中数字2是为 id 参数传入的参数),我收到以下错误:

Traceback (most recent call last):
    4: from /Users/apickle/.rvm/rubies/ruby-2.5.1/bin/irb:11:in `<main>'
    3: from (irb):23
    2: from (irb):19:in `delete'
    1: from /Users/apickle/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/csv.rb:1139:in `foreach'
ArgumentError (wrong number of arguments (given 2, expected 1))

只是为了摆脱它,我尝试在刚退出并重新打开的 irb 会话中对其进行测试,并且在启动它时我正在输入require "csv" 我不知道该怎么做。 :/

编辑:我已将函数重命名为destroyflfllgpt ,并且得到了相同的结果 - 我制作了一个简单的函数,该函数采用一个名为id整数putsputs 该功能有效。 它似乎与 CSV 调用有某种关系……当我将这些块注释掉时,它并没有把它扔给我。 但我以前也用过它们!

我猜 CSV.foreach(file, "w") 是这里的罪魁祸首,因为我认为您想要做的是打开一个新文件然后写入结果? 看看这个: https : //ruby-doc.org/stdlib-2.0.0/libdoc/csv/rdoc/CSV.html#method-c-foreach

如果更改它没有帮助,您可以发布完整的错误消息吗? 这样更容易识别错误。

如果没有确切的错误消息,就很难诊断问题,错误消息包括发生错误的行号、发生错误的方法、发生错误的方法调用以及堆栈跟踪。

但是,您发布的代码中只有一个地方使用 2 个参数调用方法:

CSV.foreach(file, "w") do |row| 
  # …
end

事实上, CSV::foreach的文档清楚地表明CSV::foreach只接受一个位置参数,这一定是罪魁祸首。 您的代码中没有其他地方可能会引发此异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM