2017-04-06 79 views

回答

7

原因很简单,&作为一元运算符是一种特殊形式,因为它在ccall语法中使用(虽然this syntax is deprecated now)。因此&(1, 2)被解析为Expr(:&, :(1, 2))

  • |不是一元运算符所以|(1, 2)被解析为1 | 2,函数调用。
  • +-有特殊情况的解析规则,使+(1, 2)-(1, 2)均可解析为两个参数的函数调用(否则他们将是一对参数元组函数调用,这将在运行时错误)。 &不受这些规则的约束,因为它是一种特殊形式,而不是普通的运营商。
  • Base.:&根本不作为运算符进行分析,而只是对标识符的普通字段引用。所以这里没有歧义,它像一个普通的函数调用一样被解析。同样,(&)(1, 2)被解析为普通函数调用,因为(&)被解析为普通标识符。
+0

谢谢你一个很好的解释! –