Получить индекс итерации базы данных на ruby

Я пытаюсь перебрать файл базы данных с помощью gdbm, создать объекты со значениями, которые я получаю, и назначить их массиву. Проблема в том, что я не могу получить индекс итерации, и он мне нужен для моего массива. Вот код:

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)

Кроме того, файл базы данных закроется после выполнения блока?

1 ответ

Решение

Я хотел бы использовать each_with_index вместо each_pair.with_index:

bots_directory = "../data/bots.db"
bots = []

GDBM.new(bots_directory).each_with_index do |(nickname, password), index|
  bots[index] = Bot.new(nickname, password)
end

Или даже проще, так как индекс начинается с 0 и увеличивается на 1 тем не мение:

bots_directory = "../data/bots.db"
bots = []

GDBM.new(bots_directory).each_pair do |nickname, password|
  bots << Bot.new(nickname, password)
end

возможно map тоже вариант?

bots_directory = "../data/bots.db"

bots = GDBM.new(bots_directory).map do |nickname, password|
  Bot.new(nickname, password)
end
Другие вопросы по тегам