Je ne fais que commencer avec Ruby et personnellement, je trouve que ce qui suit est une violation du "principe de la moindre surprise". Et c'est, en citant the documentation, que uniq! "supprime les éléments en double de self. Retourne zéro si aucune modification n'est faite (c'est-à-dire qu'aucun doublon n'est trouvé)."Pourquoi uniq! retourner zéro s'il n'y a pas de doublons
Quelqu'un peut-il expliquer cela, ce qui me semble complètement contre-intuitif? Cela signifie que plutôt que d'être en mesure d'écrire une ligne de code ci-dessous en ajoutant .uniq! pour mettre fin à la première ligne, je dois au lieu d'écrire les deux lignes suivantes:
hooks = IO.read(wt_hooks_impl_file).scan(/wt_rt_00\w{2}/)
hooks = hooks.uniq
Ou suis-je manque quelque chose, une meilleure façon?
EDIT:
Je comprends que uniq! modifie son opérande. Voici le problème illustré mieux J'espère:
hooks = IO.read(wt_hooks_impl_file).scan(/wt_rt_00\w{2}/)
puts hooks.length #50
puts hooks.uniq!.length #undefined method `length' for nil:NilClass
Je soutiens que la façon uniq! les travaux le rend complètement insensé et inutile. Bien sûr dans mon cas comme indiqué, je pourrais juste ajouter .uniq à la première ligne. Cependant plus tard dans le même programme, je pousse des éléments sur un autre tableau à l'intérieur d'une boucle. Ensuite, sous la boucle, j'aimerais "dé-duper" le tableau, mais je n'ose pas écrire 'hooks_tested.uniq!' parce qu'il pourrait revenir à zéro; au lieu que je doit écrire hooks_tested = hooks_tested.uniq
En effet je soutiens cela est une mauvaise caractéristique particulièrement flagrants en ce qu'il est un principe bien connu que, lors de l'élaboration d'une méthode qui retourne un tableau, on doit toujours au moins retourner un tableau vide, plutôt que nul
les POLS a une signification particulière avec Ruby:. « ne pas surprendre Matz (le créateur de Ruby) –
inutile pour le (incorrect) but auquel vous essayez de le mettre, d'accord pratique si. vous essayez de faire quelque chose qui - par exemple - teste le résultat de 'uniq! '. Ce serait probablement ce que Matz avait en tête. ;-) –
Je suis d'accord. c'est très PHP-esque (cas exceptionnels aléatoires, incongrus). tous les autres cas, y compris 'uniq', retournent l'original. Quand 'uniq' ne trouve aucun doublon, il renvoie le tableau lui-même. sérieusement wtf. – ahnbizcad