2016-02-20 80 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