2013-09-27 55 views
0

這是Codeacademy練習的解決方案。爲什麼symbols.push先於(s.to_sym)?爲什麼這兩種方法按此順序出現?爲什麼`push`方法在`to_sym`方法的前面

symbols = [] 

strings.each { |s| symbols.push s.to_sym } 
+0

這不是必需的。它可能只是向您展示將字符串數組轉換爲新的符號數組的基本方法。 – naomik

+0

哪個練習?提供什麼公式? – sawa

+3

快速測驗:'symbols.push(x)'做了什麼? – tadman

回答

3

它只在句法上「先於」。操作順序不是嚴格的從左到右。子表達式根據需要進行評估。在這種情況下,s.to_sym是成爲方法symbols.push的參數的子表達式。

在方法被調用之前,方法的參數必須被評估,Ruby解析器知道如何解決這個問題。因此調用s.to_sym,並將結果發送到symbols.push

Ruby還會檢查運算符的優先級,例如+*,以決定哪些子表達式要先評估,一個數學公式。

Ruby方法調用約定允許您在沒有圓括號的情況下編寫函數調用,這在Ruby代碼中很常見。它可以幫助理解

symbols.push s.to_sym 

相同

symbols.push(s.to_sym) 

這是你會更經常在其他語言中看到的語法。

重要的,下面是一樣:

symbols.push 
s.to_sym 

在這種情況下,將Ruby單獨評估這兩個表達式,它會,很樂意做任何線沒有什麼用處(具體到本例中不幸因爲push很高興沒有參數)。

+2

你可以把它寫成''push''到'symbols'的值's'轉換爲符號'' – tadman

+0

@NeilSlater我明白了。非常明確的解釋,謝謝。 – HandDisco

相關問題