Ich beginne gerade mit Ruby und ich persönlich finde das Folgende eine Verletzung des "Prinzips der geringsten Überraschung". Und das heißt, zitiert aus the documentation, dass uniq! "entfernt doppelte Elemente von self. Gibt null zurück, wenn keine Änderungen vorgenommen werden (dh keine Duplikate gefunden werden)."Warum uniq! return nil, wenn es keine Duplikate gibt
Kann mir jemand das erklären, was mir völlig kontraintuitiv erscheint? Dies bedeutet, dass Sie eine Zeile Code nicht schreiben können, indem Sie .uniq! Um die erste Zeile zu beenden, muss ich stattdessen die folgenden zwei Zeilen schreiben:
hooks = IO.read(wt_hooks_impl_file).scan(/wt_rt_00\w{2}/)
hooks = hooks.uniq
Oder fehlt mir etwas, ein besserer Weg?
EDIT:
Ich verstehe, dass uniq! ändert seinen Operanden. Hier ist das Problem illustriert besser ich hoffe:
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
Ich behaupte, dass der Weg uniq! Werke machen es völlig sinnlos und nutzlos. Sicher in meinem Fall, wie gesagt, ich könnte nur .uniq an die erste Zeile anhängen. Später im selben Programm schiebe ich Elemente auf ein anderes Array innerhalb einer Schleife. Dann, unter der Schleife, möchte ich das Array "ent-dupen", aber ich wage nicht, "hooks_tested.uniq" zu schreiben. weil es null zurückgeben könnte; stattdessen ich muss Schreib hooks_tested = hooks_tested.uniq
Tatsächlich behaupten ich dies ist eine besonders eklatante Fehlfunktion in der, dass es ist ein gut bekanntes Prinzip, dass bei der Ausarbeitung eines Verfahrens, das ein Array zurückgibt, sollte man immer mindestens zurückgeben ein leeres Array, anstatt Null
der POL eine bestimmte Bedeutung mit Ruby hat. „hat nicht überraschen Matz (Rubys Konzept) –
Nutzlos für den (falschen) Zweck, zu dem Sie versuchen, es zu setzen, stimmte Praktisch, wenn. Sie versuchen etwas zu tun, das zum Beispiel das Ergebnis von 'uniq!' testet. Das wäre wahrscheinlich das, was Matz vorhatte. ;-) –
stimme ich zu. Das ist sehr PHP-esque (zufällige, inkongruente Ausnahmefälle). In allen anderen Fällen, einschließlich "uniq", wird das Original zurückgegeben. Wenn 'uniq' keine Duplikate findet, wird das Array selbst zurückgegeben. ernst wtf. – ahnbizcad