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

标签 syntax julia

经调查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/

    相关文章:

    c++ - 为什么我必须这样声明指针?

    python - 我以前从未见过的语法错误

    php - 如何执行那么长的php Rets?

    c - 为什么我们不能将一个评论嵌套在另一个评论中?

    syntax - 在 Powerapps 中,如何使用单选按钮过滤图库?

    julia - 如何在 Julia 中删除数组数组中的数组

    memory-management - 对 Julia 中的内存分配和垃圾收集感到困惑

    Julia:如何使用 JuMP 引入二进制整数来解决混合整数优化问题?

    vector - TensorOperations.jl Julia 包,用于计算向量张量的收缩

    arrays - (Julia) 快速对数组进行按列求和