Я пытаюсь выполнить итерацию через файл базы данных с помощью gdbm, создать объекты со значениями, которые я получаю, и назначить их массиву. Проблема в том, что я не могу получить индекс итерации, и мне это нужно для моего массива. Вот код:Получить индекс итерации базы данных на ruby
bots_directory = "../data/bots.db"
bots = Array.new
GDBM.new(bots_directory).each_pair.with_index do |nickname, password, index|
bots[index] = Bot.new(nickname, password)
end
Я получаю ошибку:
`[]=': no implicit conversion from nil to integer (TypeError)
Кроме того, будет файл базы данных закрывается после блока выполняется?
Это простое непонимание того, как аргументы передаются блоку и как работает параллельное присвоение. ваш код будет выдавать '[[ключ, значение], index]' это означает, что псевдоним теперь '[key, value]', пароль - 'index', а index - nil. Чтобы разделить ключевое значение, вам нужно обернуть псевдоним и пароль в круглых скобках, чтобы они их разделили, а затем стали «никнейм», «пароль» = [ключ, значение] »и« индекс = индекс ». Но @spickermann предложил гораздо лучшие способы выполнить это таких как карта. Для быстрого понимания попробуйте это в irb 'a, b, c = [[" k "," v "], 1]', затем попробуйте '(a, b), c = [[" k "," v "] , 1] ' – engineersmnky