Įvadas į Ruby * Splat ir double ** Splat operatorius

Įvadas į Ruby * Splat ir double ** Splat operatorius

Ar kada norėjote apibrėžti metodą, nežinodamas, kiek jo reikės? Ar praleidžiate ilgas neramias naktis, norėdami, kad būtų paprastas būdas suskirstyti sąrašą į maišų? Na, neieškok Ruby's splat operatorių! Yra labai daug puikių dalykų, kuriuos galite padaryti naudodamiesi šiais būdais, bet aš tik apžvelgsiu pagrindus ir keletą gražių mano atrastų gudrybių.

Vienvietis * Splat

„Splat operator“ turi beveik begalę naudojimo būdų. Tačiau pagrindinė mintis yra ta, kad visada, kai nenorite nurodyti turimų argumentų skaičiaus, naudosite „Splat“ operatorių. Paprasčiausias pavyzdys būtų maždaug toks:

Kitas naudingas dalykas yra tai, kad splat operatorius gali sudaryti masyvą į kelis argumentus:

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

Taip pat galite naudoti splat operatorių, norėdami patraukti bet kurį masyvo segmentą:

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

Jūs pastebėsite, kad likęs kintamasis vis dar yra masyvas, o tai yra labai patogu. Taigi, vadovaudamiesi paskutiniu pavyzdžiu, vis tiek galite atlikti tokius veiksmus:

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

Tai yra vieno splat operatoriaus pagrindai, bet aš raginu tave daugiau jaustis. Tai gali padaryti tokius dalykus kaip masyvų derinimas, maišų ir eilučių pavertimas masyvais arba elementų ištraukimas iš masyvo!

Dvivietis ** Splat

Dvigubo purškimo operatorius pasirodė „Ruby 2.0“. Tai gana panašu į originalų purslą su vienu skirtumu: jį galima naudoti maišant! Štai pavyzdys, kaip paprasčiausiai naudoti dvigubą splatą.

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

Sudėjus visa tai kartu

Tikiuosi, kad pamatysite, jog galimybės naudoti šias dvi kartu yra begalinės. Svarbiausia nepamiršti, kad metodo metodo parametrus naudojate tada, kai nesate tikri, kiek argumentų šis metodas naudos.

Galiausiai, aš padariau nedidelę funkciją, kuri parodo, kaip galite išfiltruoti visus argumentus, kurie nėra pagrindinės vertės pora, naudojant tiek vieną, tiek dvigubą.

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

Dėkojame, kad perskaitėte, o dabar pabandykite patys pažaisti!