调用&(x,y)按位运算符

时间:2017-04-06 18:11:10

标签: syntax julia

在调查Why does the + function appear to work on tuples?后,我有以下问题。

有人可以解释为什么Base.:&(1,2)有效但&(1,2)失败了吗? 同时Base.:|(1,2)|(1,2)都有效。

1 个答案:

答案 0 :(得分:7)

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

  • |不是一元运算符,因此|(1, 2)被解析为1 | 2,即函数调用。
  • +-具有特殊情况解析规则,因此可以将+(1, 2)-(1, 2)解析为双参数函数调用(否则它们将是单参数函数调用元组,这会在运行时出错)。 &不受这些规则的约束,因为它是一种特殊形式,而不是普通的运营商。
  • Base.:&根本不被解析为运算符,而只是对标识符的普通字段引用。所以这里没有歧义,它被解析为普通的函数调用。类似地,(&)(1, 2)被解析为普通函数调用,因为(&)被解析为普通标识符。