【发布时间】:2014-07-01 19:37:53
【问题描述】:
从 ruby 1.9 开始,您可以对哈希内的符号使用新语法
1.9 之前
{:a => 'b'}
1.9 及更高版本
{a:'b'}
但是为什么对于包含无法轻易转换的字符串的符号{:"a-b" => 'c'}like
{"a-b": 'c'}
Ruby 词法解析器中有什么东西可以防止这种情况发生吗?还是没有实施的根本原因?
【问题讨论】:
-
对于字符串,如果它们是“干净的”,ruby 会自动将它们转换为符号。 :"a" 变成 :a 。别名约定 (:a => 3 ~ a: 3) 仅适用于符号,不适用于转换为符号之前的字符串。这是故意的,因为在您声明的情况下, :"a-b" => 'c' 不是有效的赋值(已解析-> :a -b => 'c')。如果字符串不干净,则显示为符号(:“a-b”),但“a-b”实际上不是字符串,它只是一个注释。
-
@John 你已经被自己弄糊涂了。
{:"a-b" => 'c'}中的键不是字符串,而是符号。 -
@RubyRacer:不完全是。 JavaScript 样式的 symbol-as-a-a-hash-key 表示法仅适用于也符合标签条件的符号,因此您不能说出
@a: b、$a: b以及其他各种适用于标准符号语法的东西和哈希火箭。
标签: ruby