2016-07-27 2 views
1

Для методов Ruby, но и необходимого синтаксис ключевого слова хорошийнеобходимых рубин ключевых аргументов

def foo(bar:, baz:) 
    : 
end 

foo(:bar => true, :baz => false) # OK 
foo(:bar => true) # missing keyword argument error 

Может один «знак» список необходимых ключевых слов с каким-то магией? т.е.

required_keywords = [:bar, :baz] 
def foo(magic(required_keywords)) 
    : 
end 

Я ожидаю, что нет, но я часто удивлены тем, что рубин можно убедить сделать.

+3

Связанный: http://stackoverflow.com/questions/31810695/define-method-with-predefined-keyword-arguments – Dogbert

ответ

0

знака (*) и двойного НОАСА т (**) операторы позволяют метод принимать произвольное число аргументов. Первый будет хранить аргументы в массиве, а последний сохранит их в хеше.

Существует также параметр hash, который является необязательным хеш-параметром, обычно включаемым в качестве последнего параметра в объявлении метода. Он также может принимать произвольное количество аргументов (фактически, они являются простыми элементами хэша).

Однако в обоих случаях указанные аргументы неизвестны при объявлении метода. Следовательно, вы не можете сделать неизвестное количество аргументов «требуется».

Дополнительная информация о splat, double splat и требуемых параметрах ключевых слов доступна по адресу this blog post.