Uvod u Ruby-jeve * Splat i dvostruke ** Splat operatore

Uvod u Ruby-jeve * Splat i dvostruke ** Splat operatore

Jeste li ikada željeli definirati metodu, a da ne znate koliko će argumenata biti potrebna? Provodite li duge nemirne noći želeći da postoji jednostavan način da se popis odvoji u hash? Pa ne tražite dalje od Rubynih splat operatora! S njima možete učiniti toliko sjajnih stvari, ali ja ću samo proći kroz osnove i nekoliko zgodnih trikova koje sam otkrio.

Pojedinačno * Splat

Operator splat ima gotovo beskrajne svrhe. Ali glavna je ideja da kad god ne želite navesti broj argumenata koje imate, koristite splat operator. Najjednostavniji primjer bio bi otprilike ovako:

Još jedna korisna stvar je da operator splat može napraviti niz u nekoliko argumenata:

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

Operator splat možete koristiti i za hvatanje bilo kojeg segmenta niza:

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

Primijetit ćete da je varijabla rest i dalje niz, što je vrlo zgodno. I tako, slijedeći posljednji primjer, još uvijek možete raditi ovakve stvari:

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

To su osnove jednog splat operatora, ali molim vas da se više petljate s njim. Može raditi stvari poput kombiniranja nizova, pretvaranja heša i nizova u nizove ili izvlačenja predmeta iz niza!

Dupli ** znak

Operator dvostrukog splata izašao je natrag u Ruby 2.0. Prilično je sličan izvornom znaku s jednom razlikom: može se koristiti za raspršivanje! Evo primjera najosnovnije upotrebe dvostrukog znaka.

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

Sve to zajedno

Nadam se da vidite da su mogućnosti zajedničkog korištenja ove dvije mogućnosti prilično beskrajne. Glavna stvar koju morate imati na umu je da koristite splats kao parametar u metodi kada niste sigurni koliko će argumenata ta metoda koristiti.

Na kraju, napravio sam malu funkciju koja pokazuje kako možete filtrirati bilo koji argument koji nije par vrijednosti ključa koristeći i jedan znak i dvostruki znak.

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

Hvala na čitanju, a sada se pokušajte poigrati s tim!