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.
这两个不等价!上面的 Hash
有 Symbol
s 作为键,你的替换有 String
s 作为键。上面的 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
不需要引用的文字,如果你不打算使用插值,你不应该使用双引号。
我的函数中有这行代码:
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.
这两个不等价!上面的 Hash
有 Symbol
s 作为键,你的替换有 String
s 作为键。上面的 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
不需要引用的文字,如果你不打算使用插值,你不应该使用双引号。