所以我正在编写一个简单的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
...并且我正在终端上的irb会话中运行它(Mac OS X 10.13,ruby 2.5.1p57(2018-03-29修订版63029)[x86_64-darwin17])以对其进行测试(例如,通过粘贴上面的代码,然后尝试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
s。该功能有效。似乎与CSV调用有关...当我注释掉那些块时,它并没有抛出给我。但是我也曾经使用过它们!
答案 0 :(得分:0)
我猜这里是罪魁祸首CSV.foreach(file,“ w”),因为我想您想做的就是打开一个新文件,然后写入结果?检查一下:https://ruby-doc.org/stdlib-2.0.0/libdoc/csv/rdoc/CSV.html#method-c-foreach
如果更改没有帮助,您可以张贴完整的错误消息吗?这样可以更轻松地识别错误。
答案 1 :(得分:0)
没有确切的错误消息就很难诊断问题,错误消息包括发生错误的行号,发生错误的方法,发生错误的方法调用以及堆栈跟踪。
但是,在您发布的代码中恰好有一个 位置,其中带有2个参数的方法被调用:
CSV.foreach(file, "w") do |row|
# …
end
实际上,the documentation for CSV::foreach
明确指出CSV::foreach
仅接受一个位置自变量,这个必须是罪魁祸首。您的代码中根本没有其他地方可能引发此异常。