這是Codeacademy練習的解決方案。爲什麼symbols.push
先於(s.to_sym)
?爲什麼這兩種方法按此順序出現?爲什麼`push`方法在`to_sym`方法的前面
symbols = []
strings.each { |s| symbols.push s.to_sym }
這是Codeacademy練習的解決方案。爲什麼symbols.push
先於(s.to_sym)
?爲什麼這兩種方法按此順序出現?爲什麼`push`方法在`to_sym`方法的前面
symbols = []
strings.each { |s| symbols.push s.to_sym }
它只在句法上「先於」。操作順序不是嚴格的從左到右。子表達式根據需要進行評估。在這種情況下,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
很高興沒有參數)。
這不是必需的。它可能只是向您展示將字符串數組轉換爲新的符號數組的基本方法。 – naomik
哪個練習?提供什麼公式? – sawa
快速測驗:'symbols.push(x)'做了什麼? – tadman