语法错误可能是由于不同的ruby版本

时间:2016-02-20 08:20:49

标签: ruby-on-rails ruby ruby-on-rails-4 syntax-error

我的函数中有这行代码:

people << {"id": person.id, "name": person.name, "age": person.age}

这在我的开发环境中运行良好。但在我朋友的电脑中,它表示此行中存在语法错误。它说"id": person.id中的冒号是错误的。将上述代码编写为"id"=> person.id修复了该问题。这个问题可能是由于不同的ruby版本?

2 个答案:

答案 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解决了问题。

这两个不等同于!上面的HashSymbol个作为键,您的替代品有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中引入。在此之前,它是所有哈希火箭(=>)语法。