我定义了一个方法:
def method(one: 1, two: 2)
[one, two]
end
当我这样称呼时:
method one: 'one', three: 'three'
我明白了:
ArgumentError: unknown keyword: three
我不想逐个从散列中提取所需的键或排除额外的键。有没有办法绕过这种行为,除了定义这样的方法:
def method(one: 1, two: 2, **other)
[one, two, other]
end
答案 0 :(得分:8)
如果您不想像other
那样写**other
,可以省略它。
def method(one: 1, two: 2, **)
[one, two]
end
答案 1 :(得分:2)
不确定它是否在ruby 2.0中有效,但您可以尝试使用**_
忽略其他参数。
def method(one: 1, two: 2, **_)
就内存使用情况和其他所有方面而言,我相信这与**other
之间没有区别,但下划线是在ruby中静音参数的标准方法。
答案 2 :(得分:0)
解决此问题的常用方法是使用选项哈希。你会经常看到这个:
def method_name(opts={})
one = opts[:one] || 1 # if caller doesn't send :one, provide a default
two = opts[:two] || 2 # if caller doesn't send :two, provide a default
# etc
end