Μια εισαγωγή στους χειριστές Ruby's * Splat και double ** Splat

Μια εισαγωγή στους χειριστές Ruby's * Splat και double ** Splat

Θέλατε ποτέ να ορίσετε μια μέθοδο χωρίς να γνωρίζετε πόσα επιχειρήματα θα χρειαστούν; Περνάτε πολλές ανήσυχες νύχτες, επιθυμώντας να υπάρχει ένας εύκολος τρόπος για να χωρίσετε μια λίστα σε κατακερματισμό; Λοιπόν, μην ψάχνετε άλλο από τους χειριστές της Ruby! Υπάρχουν τόσα πολλά σπουδαία πράγματα που μπορείτε να κάνετε με αυτά, αλλά απλώς πρόκειται να αναφερθώ στα βασικά και μερικά τακτοποιημένα κόλπα που έχω ανακαλύψει.

Μονό * Splat

Ο χειριστής splat έχει σχεδόν ατελείωτες χρήσεις. Αλλά η κύρια ιδέα είναι ότι όποτε δεν θέλετε να καθορίσετε τον αριθμό των επιχειρημάτων που έχετε, θα χρησιμοποιούσατε έναν τελεστή splat. Το απλούστερο παράδειγμα θα ήταν κάτι τέτοιο:

Ένα άλλο χρήσιμο πράγμα είναι ότι ο χειριστής splat μπορεί να δημιουργήσει έναν πίνακα σε διάφορα ορίσματα:

arr = ["first", "second", "third"]def threeargs(*arr)#makes three arguments

Μπορείτε επίσης να χρησιμοποιήσετε το χειριστή splat για να αρπάξετε οποιοδήποτε τμήμα ενός πίνακα:

first, *rest, last = ["a", "b", "c", "d"]p first # "a"p rest # ["b", "c"]p last # "d"

Θα παρατηρήσετε ότι η υπόλοιπη μεταβλητή εξακολουθεί να είναι ένας πίνακας, ο οποίος είναι εξαιρετικά βολικός. Έτσι, ακολουθώντας το τελευταίο παράδειγμα, μπορείτε ακόμα να κάνετε τέτοια πράγματα:

first, *rest, last = ["a", "b", "c", "d"]p rest[0] # "b"

Αυτά είναι τα βασικά στοιχεία του χειριστή single splat, αλλά σας παρακαλώ να το χάσετε περισσότερο. Μπορεί να κάνει πράγματα όπως να συνδυάσει πίνακες, να μετατρέψει κατακερματισμούς και χορδές σε πίνακες ή να τραβήξει αντικείμενα από μια συστοιχία!

Διπλό ** Splat

Ο χειριστής διπλού splat βγήκε ξανά στο Ruby 2.0. Είναι αρκετά παρόμοιο με το αρχικό splat με μία διαφορά: μπορεί να χρησιμοποιηθεί για κατακερματισμούς! Ακολουθεί ένα παράδειγμα για την πιο βασική χρήση του διπλού splat.

def doublesplat(**nums) p **numsenddoublesplat one: 1, two: 2 # {:one=>1, :two=>2}

Βάζοντας τα όλα μαζί

Ελπίζω να δείτε ότι οι δυνατότητες είναι αρκετά ατελείωτες με τη χρήση αυτών των δύο μαζί. Το κύριο πράγμα που πρέπει να θυμάστε είναι ότι χρησιμοποιείτε splats ως παράμετρο σε μια μέθοδο, όταν δεν είστε βέβαιοι για το πόσα επιχειρήματα θα χρησιμοποιήσει αυτή η μέθοδος.

Τέλος, έκανα μια μικρή συνάρτηση που δείχνει πώς μπορείτε να φιλτράρετε οποιοδήποτε επιχείρημα που δεν είναι ζεύγος τιμών κλειδιού, χρησιμοποιώντας ένα μόνο splat και double splat.

def dubSplat(a, *b, **c) p cenddubSplat(1,2,3, 4, a: 40, b: 50)#{:a=>40, :b=>50}

Ευχαριστούμε που διαβάσατε και τώρα δοκιμάστε να παίξετε μαζί σας!