首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用大括号声明散列是否需要赋值?

用大括号声明散列是否需要赋值?
EN

Stack Overflow用户
提问于 2014-10-23 16:06:52
回答 3查看 647关注 0票数 1

我以为我可以使用{}或Hash[]声明散列,但是大括号似乎无法工作,除非我将它赋值给一个变量(参见下面)。我猜irb会混淆它是散列还是块。这是正确的,还是我不正确地声明了带有大括号的散列?

代码语言:javascript
运行
复制
>> 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}
>>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-23 16:17:48

您可以通过添加括号来解决这个问题:

代码语言:javascript
运行
复制
puts({ :a => 1, :b => 2 })
# {:a=>1, :b=>2}

如果省略括号,Ruby将把大括号解释为块:

代码语言:javascript
运行
复制
puts { :a => 1, :b => 2 }
# SyntaxError: unexpected ':', expecting '}'

# semantically the same as

puts do
  :a => 1, :b => 2
end
# SyntaxError: unexpected =>, expecting keyword_end

但是,您也可以省略两个括号,而Ruby将将其视为哈希:

代码语言:javascript
运行
复制
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}

你甚至可以用短符号来表示符号键;-)

代码语言:javascript
运行
复制
puts a: 1, b: 2
# {:a=>1, :b=>2}
票数 6
EN

Stack Overflow用户

发布于 2014-10-23 16:09:43

它只是需要明确的语法,例如,

代码语言:javascript
运行
复制
irb> puts({ :a => 1, :b => 2 })
{:a=>1, :b=>2}
票数 2
EN

Stack Overflow用户

发布于 2014-10-23 16:15:04

您的脚本{.}看起来像在传递一个代码块一样看起来像红宝石。因为puts是一种可以接受参数和/或块的方法,所以需要指定花括号中的内容是参数而不是块。尝试:

代码语言:javascript
运行
复制
puts( { a: 1, b: 2 })
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26532409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档