如果我有一个ruby方法,它接受命名参数...
def smoosh(first: nil, second: nil)
first + second
end
如果键匹配,将散列传递给该方法的最简单方法是什么?
params = { first: 'peanut', second: 'butter' }
smoosh(params)
上述操作会产生参数错误。
更新:
看起来这可能是Sinatra参数如何工作的问题。
当我这样做:
get 'a_sinatra_route' do
hash = params.clone
hash.symbolize_keys!
smoosh(hash)
end
它工作正常。如果只传递参数本身,它就不工作了。(即使您可以使用符号键params[:attr]
访问单个参数)
4条答案
按热度按时间nnt7mjpx1#
对我来说似乎很好。
vxf3dgd42#
如果函数使用关键字参数,则需要使用**(double splat)。The ** (introduced in Ruby 2.0)的作用类似于原始的 * 运算符,但可以与哈希一起使用(另请参见:another good resource):
chhqkbe13#
这应该在ruby 2中起作用,但在ruby 3中不起作用,因为散列不再转换为关键字参数。
oxf4rvwz4#
它抛出ArgumentError是因为您将 * 一个 * 散列传递给一个接受两个参数的方法--即使散列有两个键/值对,它仍然只是一个参数!
在这种情况下,您可以尝试:
传入值。