de Declan Meehan

O introducere la operatorii Ruby Splat si double
fotografie, prin amabilitatea clker.com

O introducere la operatorii Ruby * Splat și double ** Splat

Ați dorit vreodată să definiți o metodă fără să știți câte argumente va lua? Vă petreceți nopți lungi neliniștite dorind să existe o modalitate ușoară de a separa o listă într-un hash? Ei bine, nu căutați mai departe decât operatorii de ruban Ruby! Există atât de multe lucruri grozave pe care le poți face cu acestea, dar voi pur și simplu să trec peste elementele de bază plus câteva trucuri îngrijite pe care le-am descoperit.

Single * Splat

Operatorul splat are utilizări aproape interminabile. Dar ideea principală este că ori de câte ori nu doriți să specificați numărul de argumente pe care le aveți, ați folosi un operator splat. Cel mai simplu exemplu ar fi ceva de genul acesta:

Un alt lucru util este că operatorul splat poate face o matrice în mai multe argumente:

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

De asemenea, puteți utiliza operatorul splat pentru a apuca orice segment al unui tablou:

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

Veți observa că variabila rest este încă o matrice, ceea ce este foarte util. Și astfel, urmând ultimul exemplu, puteți face lucruri de genul acesta:

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

Acestea sunt elementele de bază ale operatorului single splat, dar vă îndemn să vă deranjați mai mult. Poate face lucruri cum ar fi combinarea matricelor, transformarea hashurilor și șirurilor în matrice sau scoaterea articolelor dintr-o matrice!

Dublu ** Splat

Operatorul dublu splat a ieșit înapoi în Ruby 2.0. Este destul de asemănător cu splat-ul original, cu o singură diferență: poate fi folosit pentru hash! Iată un exemplu pentru cea mai simplă utilizare a unui splat dublu.

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

Punând totul împreună

Sper că puteți vedea că posibilitățile sunt destul de nesfârșite cu utilizarea acestor două împreună. Principalul lucru de reținut este că utilizați splats ca parametru într-o metodă atunci când nu sunteți sigur de câte argumente va folosi această metodă.

În cele din urmă, am făcut o mică funcție care arată cum puteți filtra orice argument care nu este o pereche de valori cheie utilizând atât un singur splat, cât și un splat dublu.

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

Vă mulțumim pentru lectură și încercați acum să vă jucați cu el însuși!