繁体   English   中英

irb中的哈希声明语法错误

[英]Hash declaration syntax error in irb

1. { :a => 10 } #=> no error
2. { a: 10 }    #=> no error

3. { :"str" => 10 } #=> no error
4. { "str": 10 }    #=> syntax error, unexpected ':', expecting =>

4.不等于2吗? 为什么2正常工作并且4抛出语法错误?

我的理解是{"key": value}不是有效的语法,因为尚不清楚它是指{:"key" => value}还是{"key" => value}

有关于这个的讨论在这里 在讨论中引用Matz的话

| Iff {'key':'value'}的意思是{:key =>'value'}我没有异议。

| 那会不会引起误解? 我认为OP希望{'key':'value'}表示{'key'=>'value}

但是考虑到{key:“ value”}是{:key =>“ value”}的简写的事实,{“ key”:“ value”}应该是{:“ key” =>“ value”的简写}。 除此之外,由于它使我想起JSON太多了,所以将a:和“ a”:设置为不同的名称可能会比上述误解引起更多的混乱。

  matz. 

Hash :当您的键始终是符号时, Hash允许使用另一种语法形式。

options = { :font_size => 10, :font_family => "Arial" }

您可以将其编写为:

options = { font_size: 10, font_family: "Arial" }

在您的前3种情况下,所有字符都位于键位置,但是在第4种情况下是字符串实例,而不是作为键的符号实例。这就是第4种情况是无效的Ruby语法的原因。

{ :a => 10 }.keys[0].class # => Symbol
{ a: 10 }.keys[0].class    # => Symbol
{ :"str" => 10 }.keys[0].class # => Symbol

否。(1)是标准符号,(2)是符号键哈希的简写1.9语法,(3)是“ str” .to_sym的简写,(4)不存在,您应该使用hashrocket。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM