Знакомство с операторами Ruby *Splat и двойным **Splat

1656682087 znakomstvo s operatorami ruby splat i dvojnym splat

от Деклана Михана

1*4Cc4O2WsCRkCaFiy0u92QA
Фото предоставлено clker.com

Вы когда-нибудь хотели определить метод, не зная, сколько аргументов он займет? Вы проводите долгие беспокойные ночи, желая, чтобы был простой способ разделить список на хеш? Ну что ж, не смотрите дальше, чем операторы 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"

Вы заметите, что переменная rest все еще массив, что очень удобно. Следовательно, следуя последнему примеру, вы все еще можете делать следующие вещи:

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

Это основы единственного оператора Splat, но я призываю вас больше с ним возиться. Он может объединять массивы, превращать хеши и строки в массивы или вытаскивать элементы из массива!

Двухместный **Splat

Оператор двойного знака появился еще у Ruby 2.0. Он очень похож на оригинальный оплат с одним отличием: его можно использовать для хешей! Вот пример простого использования двойного знака.

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}

Спасибо, что прочитали, а теперь попробуйте поиграть с этим сами!

Добавить комментарий

Ваш адрес email не будет опубликован.