什么时候可以省略用于Ruby哈希的花括号?

时间:2019-07-26 15:52:28

标签: ruby

所以这在Ruby中是合法的:

puts key: "value"
  

{:key =>“ value”}

但这不是:

hsh = key: "value"
puts hsh
  

sandbox.rb:1:语法错误,意外的“:”,期望输入结束

     

hsh =键:“值”

为什么不呢?什么时候可以省略花括号代替散列符?

2 个答案:

答案 0 :(得分:3)

当哈希是传递给函数的最后一个参数时,可以省略花括号。因此,例如,在Rails link_to帮助器中不需要它们作为选项,但是在hsh = key: "value"示例中确实需要它们,因为没有函数可以将哈希作为参数。 / p>

答案 1 :(得分:2)

当哈希是方法调用的最后一个参数时,您可以省略花括号。当您写时:

 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}