J'essaie de parcourir le fichier de base de données avec gdbm, créer des objets avec les valeurs que je reçois et les affecter à un tableau. Le problème est que je n'arrive pas à obtenir l'indice d'itération et j'en ai besoin pour mon tableau. Voici le code:Obtenir l'index de l'itération de base de données sur 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
erreur que je reçois:
`[]=': no implicit conversion from nil to integer (TypeError)
Aussi, fermera ses portes de fichiers de base de données après que le bloc est exécuté?
Il s'agit d'une simple mauvaise compréhension de la façon dont les arguments sont transmis au bloc et du fonctionnement de l'affectation parallèle. votre code donnera '[[clé, valeur], index]' cela signifie que le pseudo est maintenant '[clé, valeur]', le mot de passe est 'index', et l'index est nul. Pour diviser la valeur de la clé, vous devez envelopper le pseudo et le mot de passe entre parenthèses pour les diviser, puis devient pseudo, mot de passe = [clé, valeur] 'et index = index.Mais @spickermann a suggéré de bien meilleurs moyens pour accomplir ceci comme la carte. Pour une compréhension rapide, essayez ceci dans irb 'a, b, c = [[" k "," v "], 1]' puis essayez '(a, b), c = [[" k "," v "] , 1] ' – engineersmnky