«ArgumentError (неправильное количество аргументов (задано 2, ожидается 1))» для простой функции Ruby - PullRequest
0 голосов
/ 23 сентября 2018

Итак, я пишу простую Ruby-программу, по сути, простую ORM.В моем методе «delete» я написал следующее:

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 ... когда я комментирую эти блоки, это мне не бросается.Но я использовал их и раньше!

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Трудно диагностировать проблему без точного сообщения об ошибке, которое включает в себя номер строки, в которой происходит ошибка, метод, в котором происходит ошибка, вызов метода, в котором происходит ошибка, и трассировка стека.

Однако в опубликованном вами коде есть ровно одно место, где метод вызывается с 2 аргументами:

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

И действительно, документация для CSV::foreach ясно говорит, что CSV::foreach принимает только один позиционный аргумент, этот должен быть виновником.В вашем коде просто нет другого места, которое могло бы вызвать это исключение.

0 голосов
/ 24 сентября 2018

Я думаю, что CSV.foreach (file, "w") является виновником здесь, потому что я думаю, что вы хотите сделать, это открыть новый файл и затем записать результат?Проверьте это: https://ruby -doc.org / stdlib-2.0.0 / libdoc / csv / rdoc / CSV.html # method-c-foreach

Если его изменить непомогите, можете выложить полное сообщение об ошибке?Это облегчает выявление ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...