2009-09-13 5 views
0
def add app 
    @has_app[app] = true 
    @apps << app 
end 

En the code above, au lieu d'utiliserUtilisez include? au lieu d'un tracker

@has_app[app] = true 

de garder une trace de la présence de 'app', ne pourrait-on dire aussi:

@apps.include? (app) 

et de faire disparaître avec @has_app? J'essaie de comprendre pourquoi cette variable séparée est absolument nécessaire ici (?).

Répondre

1

Si cela est la mesure du code, alors oui, vous pouvez simplement utiliser la méthode include?. Ce sont des données redondantes. Il se pourrait, cependant, que ce hachage de booléens ait un sens différent qui n'est pas clair à partir de ces lignes de code.

Il y aurait une différence de performance (pour les grandes listes), car une recherche de hachage est plus rapide qu'une recherche de tableau lorsque la taille augmente. (Vous devriez vérifier les spécificités de Ruby, si c'est important).

1

Les méthodes avec des points d'interrogation vérifient simplement l'état de la variable au lieu de la modifier. Ainsi, @apps.include?(app) retournera vrai ou faux selon le tableau ayant l'objet donné.

0

Oui, je suis d'accord avec vous. @has_app? n'est pas un must. La seule raison pour laquelle je peux penser à pourquoi le codeur original l'a utilisé est pour la performance. Notez que:

@has_app is a Hash 
@app is an Array.