我的函数中有这行代码:
people << {"id": person.id, "name": person.name, "age": person.age}
这在我的开发环境中运行良好。但在我朋友的电脑中,它表示此行中存在语法错误。它说"id": person.id
中的冒号是错误的。将上述代码编写为"id"=> person.id
修复了该问题。这个问题可能是由于不同的ruby版本?
答案 0 :(得分:2)
people << {"id": person.id, "name": person.name, "age": person.age}
此语法为new in 2.2.0。在2.2之前,JSON样式Symbol
文字中的Hash
只能是有效的Ruby标识符(严格来说,有效的Ruby 标签)并且无法引用。
有关详细信息,请参阅Feature #4276: Allow use of quotes in symbol syntactic sugar for hashes。
将上述代码编写为
"id"=> person.id
解决了问题。
这两个不等同于!上面的Hash
有Symbol
个作为键,您的替代品有String
个作为键。上面的Hash
文字有几个等效的符号,但你的不是:
{ id: person.id, name: person.name, age: person.age } # 1.9+
{ 'id': person.id, 'name': person.name, 'age': person.age } # 2.2+
{ :id => person.id, :name => person.name, :age => person.age } # all versions
{ :'id' => person.id, :'name' => person.name, :'age' => person.age } # all versions
{ :"id" => person.id, :"name" => person.name, :"age" => person.age } # all versions
我按照优先顺序大致订购了它们,第一个是最优先的。你不应该引用那些不需要引用的Symbol
文字,如果你不打算使用插值,你就不应该使用双引号。
答案 1 :(得分:-1)
你的朋友可能正在使用Ruby&lt; V1.9。
这个简短的语法在1.9中引入。在此之前,它是所有哈希火箭(=>
)语法。