3
调查Why does the + function appear to work on tuples?后,我有以下问题。调用&(x,y)按位运算符
任何人都可以解释为什么Base.:&(1,2)
工作,但&(1,2)
失败? 同时Base.:|(1,2)
和|(1,2)
都有效。
调查Why does the + function appear to work on tuples?后,我有以下问题。调用&(x,y)按位运算符
任何人都可以解释为什么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)
被解析为普通函数调用,因为(&)
被解析为普通标识符。
谢谢你一个很好的解释! –