2016-07-27 166 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 

我不期望,但我常常对Ruby能被说服的事情感到惊讶。

+3

相关:http://stackoverflow.com/questions/31810695/define-method-with-predefined-keyword-arguments – Dogbert

回答

0

图示(*)和双SPLA吨(**)运营商允许的方法采取的参数的任意数量。前者将参数存储在一个数组中,后者将它们存储在一个哈希中。

还有选项散列,它是一个可选的散列参数,通常作为方法声明的最后一个参数。它也可以接受任意数量的参数(实际上,它们是纯哈希项)。

但是,在上述两种情况下,声明方法时参数的数量是未知的。因此,你不能让“未知”的参数数目不明。

有关splat,double splat和必需的关键字参数的更多信息,请访问this blog post