在调查为什么+函数似乎对元组起作用?我有以下问题.
任何人都能解释我为什么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)解析为普通函数调用,因为它(&)被解析为普通标识符.