Въведение в операторите * Splat на Ruby и двойни ** Splat

Въведение в операторите * Splat на Ruby и двойни ** Splat

Искали ли сте някога да дефинирате метод, без да знаете колко аргумента ще отнеме? Прекарвате ли дълги неспокойни нощи в желанието си да има лесен начин да разделите списък в хеш? Ами не търсете повече от splat операторите на Ruby! Има толкова много страхотни неща, които можете да направите с тях, но аз просто ще разгледам основите плюс няколко чисти трика, които открих.

Единичен * Splat

Splat операторът има почти безкрайни приложения. Но основната идея е, че когато не искате да посочите броя на аргументите, които имате, бихте използвали splat оператор. Най-простият пример би бил нещо подобно:

Друго полезно нещо е, че операторът splat може да направи масив в няколко аргумента:

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

Можете също да използвате оператора splat, за да вземете всеки сегмент от масив:

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

Ще забележите, че остатъчната променлива все още е масив, което е супер удобно. И така, следвайки последния пример, все още можете да правите неща като това:

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

Това са основите на оператора с единичен знак, но аз ви призовавам да се забърквате повече с него. Той може да прави неща като комбиниране на масиви, превръщане на хешове и низове в масиви или изваждане на елементи от масив!

Двойно ** Splat

Операторът с двойно изплуване излезе отново в Ruby 2.0. Това е доста подобно на оригиналния splat с една разлика: може да се използва за хешове! Ето пример за най-основното използване на двоен знак.

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

Събирайки всичко заедно

Надявам се, че виждате, че възможностите са доста безкрайни, ако използвате тези две заедно. Основното нещо, което трябва да имате предвид, е, че използвате символи като параметър в метод, когато не сте сигурни колко аргументи ще използва този метод.

И накрая, направих малка функция, която показва как можете да филтрирате всеки аргумент, който не е двойка ключови стойности, използвайки еднократен и двоен знак.

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

Благодаря, че прочетохте, а сега опитайте да си поиграете сами!