mik*_*ike 1 ruby hash variable-declaration
我以为我可以使用{}或Hash []声明哈希,但是花括号似乎不起作用,除非我将它分配给变量(见下文).我猜irb对于它是哈希还是块都感到困惑.这是正确的,还是我用花括号错误地声明哈希?
>> puts h = { :a=>1, :b=>2 }
{:a=>1, :b=>2}
>> puts { :a=>1, :b=>2 }
SyntaxError: (irb):58: syntax error, unexpected =>, expecting '}'
puts { :a=>1, :b=>2 }
^
from /usr/bin/irb:12:in `<main>'
>> puts Hash[ :a=>1, :b=>2 ]
{:a=>1, :b=>2}
>>
Run Code Online (Sandbox Code Playgroud)
您可以通过添加括号来解决此问题:
puts({ :a => 1, :b => 2 })
# {:a=>1, :b=>2}
Run Code Online (Sandbox Code Playgroud)
如果省略括号,Ruby会将花括号解释为块:
puts { :a => 1, :b => 2 }
# SyntaxError: unexpected ':', expecting '}'
# semantically the same as
puts do
:a => 1, :b => 2
end
# SyntaxError: unexpected =>, expecting keyword_end
Run Code Online (Sandbox Code Playgroud)
但是你也可以省略两个括号,Ruby会把它当作哈希:
puts :a => 1, :b => 2
# {:a=>1, :b=>2}
# same as
puts(:a => 1, :b => 2)
# {:a=>1, :b=>2}
# same as
puts({:a => 1, :b => 2})
# {:a=>1, :b=>2}
Run Code Online (Sandbox Code Playgroud)
你甚至可以用符号键的短符号;-)
puts a: 1, b: 2
# {:a=>1, :b=>2}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
457 次 |
| 最近记录: |