Вступ до операторів * 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"

Ви помітите, що змінна rest все ще є масивом, що дуже зручно. Отже, наслідуючи останній приклад, ви все ще можете робити такі речі:

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

Це основи єдиного оператора 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}

Дякуємо за читання, а тепер спробуйте пограти з ним самі!