【发布时间】:2019-07-26 15:52:28
【问题描述】:
所以这在 Ruby 中是合法的:
puts key: "value"
{:key=>“值”}
但这不是:
hsh = key: "value"
puts hsh
sandbox.rb:1: 语法错误,意外 ':',期待输入结束
hsh = 键:“值”
为什么不呢?我什么时候可以省略散列的花括号?
【问题讨论】:
标签: ruby
所以这在 Ruby 中是合法的:
puts key: "value"
{:key=>“值”}
但这不是:
hsh = key: "value"
puts hsh
sandbox.rb:1: 语法错误,意外 ':',期待输入结束
hsh = 键:“值”
为什么不呢?我什么时候可以省略散列的花括号?
【问题讨论】:
标签: ruby
当哈希是传递给函数的最后一个参数时,您可以省略大括号。因此,例如,Rails link_to 助手中的选项不需要它们,但在 hsh = key: "value" 示例中确实需要它们,因为没有函数可以将哈希作为参数。
【讨论】:
当哈希是方法调用的最后一个参数时,您可以省略大括号。当你写:
puts key: 'value'
你实际上调用了puts方法,参数为{key: value},所以你可以这样写:
puts({key: 'value'})
但在 Ruby 中,您可以跳过普通大括号和大括号。
要详细了解它的工作原理,请考虑以下示例:
# Hash as only paramter
puts(a:1)
#{:a=>1}
# Hash as a last parameter
puts('cat', a: 1)
#cat
#{:a=>1}
# Hash as a first parameter - cannot skip
puts(a: 1, 'cat')
# >> SyntaxError: unexpected ')', expecting =>
# >> puts(a: 1, 'cat')
^
puts({a: 1}, 'cat')
#{:a=>1}
#cat
# Two hashes
puts({a: 1}, {b: 2})
#{:a=>1}
#{:b=>2}
puts({a: 1}, b: 2)
#{:a=>1}
#{:b=>2}
【讨论】:
key: 'value' 而不是{key: 'value'}。你有什么令人不安的例子吗?
instance.attribute= 是一个方法调用,但在这种情况下您也不能省略大括号。