如何防止哈希参数的自动扩展?

时间:2016-05-16 22:10:50

标签: ruby hash

当我没有提供可选的命名参数(:to)时,为什么Ruby 2.3.1会自动扩展我的哈希参数?如何防止这种情况?

def qsend(*args, to: nil,  **opts)
    puts "args: #{args}, opts: #{opts}"
end

qsend({ a: 1, b: 2, c: 3 })
qsend({ a: 1, b: 2, c: 3, d: 4 }, to: "me")

输出:

args: [], opts: {:a=>1, :b=>2, :c=>3}
args: [{:a=>1, :b=>2, :c=>3, :d=>4}], opts: {}

当我从参数列表中删除args时,我的哈希值不会在第二次调用中被删除到opts中,但会引发错误:“参数数量错误(给定1,预期为0)(ArgumentError)”< / em>的。当我从参数列表中删除opts时,我的哈希值不会在第一次调用中被丢弃到args中 - 再次抛出错误,这次:“未知关键字:a,b,c(ArgumentError)”。使用args = {}而不是* args没有区别。

以下调用有效(第一次调用中的哈希将被删除到args中),但是没有更好的方法吗?

qsend({ a: 1, b: 2, c: 3 }, {})

我更愿意在方法定义中解决问题。

编辑:方法重命名,输出固定。

0 个答案:

没有答案