Руби обязательные ключевые слова аргументы

Для методов 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

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

1 ответ

Операторы splat (*) и double spla t (**) позволяют методу принимать произвольное количество аргументов. Первый будет хранить аргументы в массиве, а второй - в хэше.

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

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

Более подробная информация о сплате, двойном сплате и обязательных параметрах ключевых слов доступна в этом блоге.

Другие вопросы по тегам