[英]Ruby - ArgumentError: wrong number of arguments (given 3, expected 2)
[英]"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"
。 我不知道该怎么做。 :/
编辑:我已将函数重命名为destroy
和flfllgpt
,并且得到了相同的结果 - 我制作了一个简单的函数,该函数采用一个名为id
整数puts
其puts
。 该功能有效。 它似乎与 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.