Ruby支持这个吗?

Ruby支持这个吗?,ruby,hash,syntax,Ruby,Hash,Syntax,在Ruby中定义dict/hash时,我们是这样做的: {:a => 'b'} {:a : 'b'} 但我读过一些Ruby代码,如下所示: {:a => 'b'} {:a : 'b'} 这应该是类似Python的。有Ruby版本支持吗?我从来没有读过任何提到这一点的Ruby书籍 更新: 我在Linux设备上运行了以下命令: $ ruby -v ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-linux] $ ruby -e '

在Ruby中定义dict/hash时,我们是这样做的:

{:a => 'b'}
{:a : 'b'}
但我读过一些Ruby代码,如下所示:

{:a => 'b'}
{:a : 'b'}
这应该是类似Python的。有Ruby版本支持吗?我从来没有读过任何提到这一点的Ruby书籍

更新:

我在Linux设备上运行了以下命令:

$ ruby -v
ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-linux]
$ ruby -e 'puts {a: "b"}'
-e:1: syntax error, unexpected ':', expecting '}'
puts {a: "b"}
        ^
并在我的Macbook上运行以下命令:

$ /Users/chaol/.rvm/wrappers/ruby-2.0.0-p247/ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.3.0]
$ /Users/chaol/.rvm/wrappers/ruby-2.0.0-p247/ruby -e 'puts {a: "b"}'
-e:1: syntax error, unexpected ':', expecting '}'
puts {a: "b"}
        ^

两个Ruby版本都是1.9+,为什么仍然会出现错误?

第二个示例中正确的语法是:

{ a: 'b' }

这是Ruby 1.9及更高版本的一个新特性,允许对Ruby哈希使用JSON ish语法。

不,Ruby不支持这种语法,但自从Ruby 1.9以来就支持这种类似的语法

h = { a: 'b' }
#=> {:a=>"b"}
相当于

h = { :a => 'b' }
#=> {:a=>"b"}

简而言之,答案是否定的。Ruby从来不支持第二种语法。你能提供一个链接到阅读本文的资源吗?试试
ruby-e'put({a:“b”})
(注意
(…)
)。在您的示例中,
{…}
被解析为传递给
put
的块,而不是散列。应该注意的是,数字键不能以这种方式直接使用。只有符号键可以以这种方式使用。我在macbook pro上安装了“rvm install 2.0.0”,但代码
{a:'b'}
仍然失败。顺便问一下,如何在注释中标记代码块?确保您真正使用的是RVM提供的Ruby(
哪个Ruby
应该包括“.RVM”)。您可以使用反勾号标记代码。有关详细信息,请查看指南。@RyanBigg I发出的命令
/Users/chaol/.rvm/wrappers/ruby-2.0.0-p247/ruby-e'puts{a:“b”}'
和get error
-e:1:语法错误,意外的“:”,预期的“}”
@EvanLi与这种哈希语法风格无关,由于这也会导致更传统的哈希语法出错,请尝试matt的建议。