经调查Why does the + function appear to work on tuples?我有以下问题。
谁能解释我为什么Base.:&(1,2)
有效但 &(1,2)
失败?
同时Base.:|(1,2)
和 |(1,2)
两者都工作。
最佳答案
原因很简单,&
因为一元运算符是一种特殊形式,因为它用于 ccall
语法(尽管 this syntax is deprecated now )。因此 &(1, 2)
被解析为 Expr(:&, :(1, 2))
.
|
不是一元运算符,所以 |(1, 2)
被解析为 1 | 2
,函数调用。 +
和 -
有特殊情况解析规则,以便 +(1, 2)
和 -(1, 2)
可以解析为双参数函数调用(否则它们将是元组上的单参数函数调用,这会在运行时出错)。 &
不受这些规则的约束,因为它是一种特殊形式,而不是普通运算符。 Base.:&
根本不被解析为运算符,而只是对标识符的普通字段引用。所以这里没有歧义,它被解析为一个普通的函数调用。同样,(&)(1, 2)
被解析为普通函数调用,因为 (&)
被解析为只是一个普通的标识符。 关于syntax - 调用 &(x,y) 按位运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43262773/