Bevezetés a Ruby * Splat és double ** Splat operátoraiba

Bevezetés a Ruby * Splat és double ** Splat operátoraiba

Szeretett volna már meghatározni egy módszert anélkül, hogy tudná, hány érvre lesz szükség? Hosszú nyugtalan éjszakákat tölt azzal a kívánsággal, bárcsak lenne egyszerű módja annak, hogy egy listát hash-ra különítsen el? Nos, ne keressen tovább, mint Ruby splat operátorai! Nagyon sok nagyszerű dolgot tehetsz ezekkel, de csak az alapokat és az általam felfedezett néhány csinos trükköt fogom áttekinteni.

Single * Splat

A splat operátornak szinte végtelen felhasználása van. De a fő gondolat az, hogy amikor nem akarja megadni az érvek számát, használjon egy splat operátort. A legegyszerűbb példa valami ilyesmi lehet:

Egy másik hasznos dolog, hogy a splat operátor tömböt hozhat létre több argumentumban:

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

A tömb operátor segítségével megragadhat egy tömb bármely szegmensét:

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

Észre fogja venni, hogy a többi változó még mindig tömb, ami nagyon hasznos. Tehát az utolsó példát követve továbbra is megteheti a következőket:

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

Ezek az alapjai az egyetlen splat operátornak, de arra kérlek benneteket, hogy többet kavarjon vele. Tehet olyan dolgokat, mint a tömbök kombinálása, a hashok és a karakterláncok tömbökké alakítása, vagy az elemek kihúzása egy tömbből!

Dupla ** Splat

A dupla splat operátor a Ruby 2.0-ban jelent meg. Nagyon hasonlít az eredeti foltra, egyetlen különbséggel: hashokra használható! Íme egy példa a dupla fröccs legalapvetőbb használatára.

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

Mindezt együttvéve

Remélem, láthatja, hogy a lehetőségek végtelenek a kettő együttes használatával. A legfontosabb dolog, amit szem előtt kell tartani, hogy a splats-ot paraméterként használja a metódusban, ha nem biztos abban, hogy a metódus hány argumentumot fog használni.

Végül készítettem egy kis függvényt, amely bemutatja, hogyan lehet egyetlen argumentumot és dupla splatot használva kiszűrni minden olyan argumentumot, amely nem kulcsértékpár.

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

Köszönjük, hogy elolvastad, és próbáld ki magad!