【问题标题】:Ruby symbol syntax with strings ex "a-b": "d"带有字符串 ex 的 Ruby 符号语法 "a-b": "d"
【发布时间】: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


【解决方案1】:

因为 Matz 决定反对:

如果 {'key': 'value'} 表示 {:key => 'value'} 我没有异议。

[但稍后...]

讨论在没有达成任何共识的情况下随风而去。 所以我将此标记为“拒绝”。我的观点在第一条评论中明确说明。

引用自https://bugs.ruby-lang.org/issues/4801

【讨论】:

    猜你喜欢
    • 2014-07-26
    • 1970-01-01
    • 2019-07-03
    • 2015-11-24
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多