【问题标题】:Colon before quotations引号前的冒号
【发布时间】:2016-06-01 21:21:06
【问题描述】:

我试过了:

:"asdfas"
# => :asdfas
  1. 控制台输出似乎表明我已声明:asdfas。我理解正确吗?如果不是,那么输出的实际含义是什么?
  2. 实际上,在字符串前使用冒号是否常见?如果是,它是做什么用的?

编辑:

Daniel Contreras 提到“每个输出都是那个函数或对象的返回值”,所以接下来的问题是:为什么不是:"asdfas"

:"asdfas"
# => :asdfas  # why not :"asdfas"

为什么在输出中去掉了asdfas 周围的引号?

【问题讨论】:

  • "在字符串前使用冒号"-- 在字符串前不是冒号。一对引号前的冒号是单个符号文字表达式。
  • 我不太明白“单符号文字表达”是什么意思。
  • 在这种情况下,:"asdfas" 是否等同于 :asdfas

标签: ruby symbols literals


【解决方案1】:

根据我对 ruby​​ 的有限了解,每个输出都是该函数或对象的返回值。例如

> foo = 1+2
=> 3

> "#{foo} bar"
=> "3 bar"

回答第 2 点:是的,如果您想使用特殊字符作为符号的一部分,它通常用作转义符。

> :foo-bar     
NameError: undefined local variable or method `bar' for main:Object
from (irb):10
from /usr/bin/irb:12:in `<main>'

> :'foo-bar'     
=> :"foo-bar"

所以,:foo-bar 是无效符号:"foo-bar" 是有效符号。

编辑:最后一部分不正确,正确答案请参见下面的峰值答案。

【讨论】:

  • :foo-bar 被解析为 :foo - bar,因此它既不是有效符号也不是无效符号——它是一个涉及符号 :foo 和其他名为 bar 的表达式。
  • 所以在输出中:"asdfas"的返回值为:asdfas。但是为什么不是输出:"asdfas"?为什么在输出中去掉了asdfas 周围的引号?
  • 因为它们在那里是多余的。这都是关于人类表示的,解析器应该可以理解。如上所示,:foo-bar 被解析为:foo - bar 原因很明显;在这里,我们需要引号来指示解析器一切都是这个Symbol 的名称。想象一下“All for $1”的商店。商品没有价格,除非有一些东西,价格为 2 美元。后者将被标记。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2021-10-21
  • 1970-01-01
  • 2015-10-18
  • 2016-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多