Ну, это зависит от того, что вы подразумеваете под «известным числом аргументов», особенно для ситуации, когда у вас есть аргументы ключевого слова плюс любое количество других аргументов ключевого слова , например:
def foo(i, keyword_1: "default", **other_keywords)
end
Я могу назвать это как
foo(6, keyword_1: "asd", other: "keyword")
. И {other: "keyword"}
будет содержаться в other_keywords
, тогда как к keyword_1
можно обращаться напрямую как к локальной переменной.
Без оператора **
это поведение более громоздко для реализации, что-то вроде этого:
def foo(i, opts={})
keyword_1 = opts.delete(:keyword_1) || "default"
# now `opts` is the same as `other_keywords`
end