Syntax 电话及;(x,y)位运算符

Syntax 电话及;(x,y)位运算符,syntax,julia,Syntax,Julia,经过调查,我有以下问题 谁能解释一下为什么Base.:&(1,2)有效,但&(1,2)失败了? 同时Base.:|(1,2)和|(1,2)两者都起作用。原因很简单,因为&作为一元运算符是一种特殊形式,因为它在ccall语法中使用(尽管如此)。因此&(1,2)被解析为Expr(:&,:(1,2)) |不是一元运算符,因此|(1,2)被解析为1 | 2,一个函数调用 +和-具有特殊的大小写解析规则,因此+(1,2)和-(1,2)可以解析为两个参数函数调用(否则它们将是元组上的一个参数函数调用,这将

经过调查,我有以下问题

谁能解释一下为什么
Base.:&(1,2)
有效,但
&(1,2)
失败了?
同时
Base.:|(1,2)
|(1,2)
两者都起作用。

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

  • |
    不是一元运算符,因此
    |(1,2)
    被解析为
    1 | 2
    ,一个函数调用
  • +
    -
    具有特殊的大小写解析规则,因此
    +(1,2)
    -(1,2)
    可以解析为两个参数函数调用(否则它们将是元组上的一个参数函数调用,这将在运行时出错)<代码>&不受这些规则的约束,因为它是一种特殊形式,而不是普通的运算符
  • Base.:&
    根本不被解析为运算符,而只是对标识符的普通字段引用。所以这里没有歧义,它像普通函数调用一样被解析。类似地,
    (&)(1,2)
    被解析为普通函数调用,因为
    (&)
    被解析为普通标识符