Je pensais Array # supprimer supprimé toutes les copies d'un objet dans un tableau, mais des choses étranges (et inexplicables pour moi) se produisent dans ce programme que j'écris. Delete ne semble fonctionner que lorsque j'inclus un bang à la fin de la fonction delete, même si cela ne semble pas être défini.Ruby array supprimer vs supprimer (bang)
Voici la fonction en question:
def propagate
@puzzle.each do |sqr, values|
if values.length == 1
@neighbors[sqr].each do |neighbor|
@puzzle[neighbor].delete!(values)
end
end
end
end
@puzzle est un hachage avec des chaînes comme clés et des valeurs, formatés comme ceci: @puzzle["A1"] = "123456789"
@neighbors est un hachage avec des chaînes comme clés et tableaux des chaînes comme valeurs:
@neighbors["A1"] = ["A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "B1", "C1", "D1", "E1", "F1", "G1", "H1", "I1", "B2", "B3", "C2", "C3"]
quand je lance le code comme ceci: @puzzle[neighbor].delete(values)
Les valeurs en puzzle ne sont pas affectées par la suppression. Mais quand j'inclus le! Ça marche.
Pourquoi est-ce?
La chose est dans IRB j'ai essayé de dupliquer le scénario, et l'interpréteur ne reconnaît même pas 'delete!'. En outre, la suppression régulière mute le tableau comme prévu dans irb. – ordinary
J'ai également essayé de créer un autre script et de l'exécuter 'a = [% w (1 2 3)]; a.delete! ("1") ' Mais j'ai NoMethodError ... Qu'est-ce qui donne? – ordinary