ruby 版本不同可能导致语法错误

Syntax error possibly due to different ruby versions

我的函数中有这行代码:

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

这运行 在我的开发环境中很好。但是在我朋友的电脑上,它说这一行有一个语法错误。它说 "id": person.id 中的冒号是错误的。将上面的代码写成 "id"=> person.id 解决了这个问题。这个问题可能是由于 ruby 版本不同造成的吗?

您的朋友可能正在使用 Ruby < v1.9.

该短语法是在 1.9 中引入的。在此之前,它都是哈希火箭 (=>) 语法。

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

这个语法是new in 2.2.0。在 2.2 之前,JSON 风格的 Hash 文字中的 Symbol 只能是有效的 Ruby 标识符(严格来说,有效的 Ruby labels) 无法引用。

详情见Feature #4276: Allow use of quotes in symbol syntactic sugar for hashes

Writing the above code as "id"=> person.id fixed the issue.

这两个等价!上面的 HashSymbols 作为键,你的替换有 Strings 作为键。上面的 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 不需要引用的文字,如果你不打算使用插值,你不应该使用双引号。