Sissejuhatus Ruby * Splat ja double ** Splat operaatoritesse

Sissejuhatus Ruby * Splat ja double ** Splat operaatoritesse

Kas olete kunagi tahtnud meetodit määratleda, teadmata, kui palju argumente see võtab? Kas veedate pikki rahutuid öid soovides, et loendi räsiks eraldamiseks oleks lihtne viis? Noh, ära vaata kaugemale kui Ruby pritsmehed! Nendega saate teha nii palju häid asju, kuid lähen lihtsalt üle põhitõed ja mõned avastatud nipid.

Üksik * Splat

Splaadioperaatoril on peaaegu lõputu kasutusala. Kuid peamine mõte on see, et alati, kui te ei soovi oma argumentide arvu täpsustada, kasutaksite splat-operaatorit. Lihtsaim näide oleks umbes selline:

Teine kasulik asi on see, et splat-operaator saab massiivi teha mitmeks argumendiks:

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

Massiivi mis tahes segmendi haaramiseks võite kasutada ka splaat-operaatorit:

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

Märkate, et ülejäänud muutuja on endiselt massiiv, mis on väga mugav. Ja nii saate viimast näidet järgides siiski teha selliseid asju:

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

Need on ühe pritsimise operaatori põhitõed, kuid ma kutsun teid üles sellega rohkem sebima. See võib teha näiteks massiive kombineerida, räsisid ja stringe massiivideks muuta või massiivist üksusi välja tõmmata!

Kahekordne ** Splat

Kahekordse pritsimise operaator tuli tagasi välja rubiinis 2.0. See on üsna sarnane algsele plaadile ühe erinevusega: seda saab kasutada räsimiseks! Siin on näide topeltpleki kõige elementaarsemast kasutamisest.

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

Kõike kokku panema

Loodan, et näete, et nende kahe koos kasutamise võimalused on üsna lõputud. Peamine asi, mida meeles pidada, on see, et kasutate meetodis parameetrina splaate, kui pole kindel, mitu argumenti see meetod kasutab.

Lõpuks tegin väikese funktsiooni, mis näitab, kuidas saate filtreerida kõik argumendid, mis pole põhiväärtuste paar, kasutades nii ühte kui ka kahte topeltplekki.

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

Täname lugemast ja proovige nüüd ise sellega ringi mängida!