为什么`push`方法在`to_sym`方法之前

时间:2013-09-27 14:48:47

标签: ruby methods

这是Codecademy练习的解决方案。为什么symbols.push位于(s.to_sym)之前?为什么这两种方法按此顺序出现?

symbols = []

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

1 个答案:

答案 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对没有参数感到满意)。