1

我正在尝试使用 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)

另外,执行块后数据库文件会关闭吗?

4

1 回答 1

2

我会使用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
于 2015-10-29T19:38:59.753 回答