Supposons que vous ayez ceci:modification concurrente en traversant un rubis Hash
def wipeProduct(hash, nameToDelete)
hash.each do |i|
key = i[0]
productName = i[1].first
hash.delete(key) if productName==nameToDelete
end
end
Je ne suis pas sûr qu'il est sûr de supprimer les choses d'un hachage pendant que vous êtes itérer sur les paires clé-valeur de hachage. J'ai vérifié la documentation du RI mais je n'ai rien vu à propos de la modification simultanée sur Hash.
Je sais que vous pouvez réécrire cette
def wipeProduct(hash, nameToDelete)
keysToDelete = []
hash.each do |i|
key = i[0]
productName = i[1].first
keysToDelete << key if productName==nameToDelete
end
keysToDelete.each {|key| hash.delete(key) }
end
ou même:
def wipeProduct(hash, nameToDelete)
hash.reject!{|key,value| nameToDelete==value.first}
end
mais je veux savoir si une modification concurrente comme indiqué dans le premier exemple ci-dessus est un problème? (Il ne semble pas être quand je cours le code)
Question: Est-ce que quelqu'un sait quelle est la position sur la modification simultanée avec Hash? (... et les autres collections?) - et j'aimerais bien avoir des liens vers des ressources documentant cela si vous voulez.