在Ruby中删除额外的关键字参数

时间:2015-06-19 15:39:41

标签: ruby ruby-2.0 keyword-argument

我定义了一个方法:

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

3 个答案:

答案 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