如果我在ruby中有一个带有命名参数的方法......
def smoosh(first: nil, second: nil)
first + second
end
Run Code Online (Sandbox Code Playgroud)
如果密钥匹配,最简单的方法是将哈希值传递给该方法:
params = { first: 'peanut', second: 'butter' }
smoosh(params)
Run Code Online (Sandbox Code Playgroud)
上面会产生一个参数错误.
看起来这可能是Sinatra参数如何工作的问题.
当我做:
get 'a_sinatra_route' do
hash = params.clone
hash.symbolize_keys!
smoosh(hash)
end
Run Code Online (Sandbox Code Playgroud)
它工作正常.当它们自己传递参数时它不起作用.(即使您可以使用符号键访问各个参数params[:attr])
Chr*_*ald 12
似乎对我来说工作得很好.
2.0.0p0 :007 > def smoosh(first: nil, second: nil)
2.0.0p0 :008?> first + second
2.0.0p0 :009?> end
=> nil
2.0.0p0 :010 > params = { first: 'peanut', second: 'butter' }
=> {:first=>"peanut", :second=>"butter"}
2.0.0p0 :012 > smoosh(params)
=> "peanutbutter"
Run Code Online (Sandbox Code Playgroud)
gan*_*elo 11
如果您的函数使用关键字参数,则需要使用 **(双 splat)。**(在 Ruby 2.0 中引入)的作用类似于原始的 * 运算符,但可以与哈希一起使用(另请参阅:另一个很好的资源):
def smoosh(first: nil, second: nil)
first + second
end
params = { first: 'double', second: 'splat' }
smoosh(**params)
=> "doublesplat"
Run Code Online (Sandbox Code Playgroud)
hlh*_*hlh -7
它抛出一个 ArgumentError ,因为您将一个散列传递给一个带有两个参数的方法 - 即使散列有两个键/值对,它仍然只是一个参数!
遇到这种情况,您可以尝试:
smoosh(params[:first], params[:second])
Run Code Online (Sandbox Code Playgroud)
传递值。
| 归档时间: |
|
| 查看次数: |
3574 次 |
| 最近记录: |