这是Codecademy练习的解决方案。为什么symbols.push
位于(s.to_sym)
之前?为什么这两种方法按此顺序出现?
symbols = []
strings.each { |s| symbols.push s.to_sym }
答案 0 :(得分: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
对没有参数感到满意)。