2016-02-20 50 views
-1

之前,我想这一点:结肠报价

:"asdfas" 
# => :asdfas 
  1. 控制台输出似乎表明,我已宣布:asdfas。我理解正确吗?如果不是,输出实际上意味着什么?
  2. 实际上,在string之前使用冒号常见吗?如果是,它用于什么?

编辑:

丹尼尔·孔特雷拉斯提到,“每一个输出是函数或对象的返回值”,所以后续的问题是:为什么不是:"asdfas"

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

为什么asdfas左右的引号在输出中被剥离下来?

+0

“在字符串之前使用冒号” - 它在字符串之前不是冒号。一对引号前面的冒号是单个符号字面表达式。 – sawa

+0

我不太明白“单一符号字面表达”的含义。 –

+0

在这种情况下,是':“asdfas”'相当于':asdfas'吗? –

回答

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"为有效符号。

编辑:这最后一部分是不正确的,请参阅下面的峰回答正确的答案。

+1

':foo-bar'被解析为':foo - bar',所以它既不是一个有效的也不是一个无效的符号 - 它是一个涉及符号:foo和别的名为'bar'的表达式。 – peak

+0

所以在输出中':“asdfas”'的返回值是':asdfas'。但为什么不输出':“asdfas”'?为什么'asdfas'周围的引号在输出中被剥离了下来? –

+0

因为它们在那里是多余的。这完全是关于人的表示,应该由解析器来理解。如上所示,出于明显的原因,':foo-bar'被解析为':foo - bar';这里我们需要引号来指示解析器,一切都是这个“Symbol”的名字。想象一下“All for $ 1”商店。物品上没有价格,除非有一些东西,价格为2美元。后者将被贴上标签。 – mudasobwa