a += 1
相当于a = a + 1
我希望a |>= √
或a |= √
等同于a = a |> √
。我可以定义这些新的运算符吗?
答案 0 :(得分:4)
更新运算符集hardcoded,目前仅限于:
+= -= *= /= //= \= ^= ÷= %= <<= >>= >>>= |= &= ⊻= $=
解析器会自动将所有这些扩展为a = a op b
。但是,所有这些运算符在基数中具有明确定义的含义,并且具有与|>
不同的优先级。你可以用你自己的意思来影响其中一个定义,但是对于那些使用你代码的人来说它会非常令人惊讶......而你自己有时会对优先级感到惊讶。
julia> const | = |>
|> (generic function with 1 method)
julia> a = 2
2
julia> a |= √
1.4142135623730951
我认为只有覆盖函数参数的行为才能使它更好一点:
julia> >>>(x, y::Function) = y(x)
>>>(x, y) = Base.:>>>(x, y)
>>> (generic function with 2 methods)
julia> a = 2
a >>>= √
1.4142135623730951
julia> 0xf3 >>> 3 # The standard unsigned bit shift
0x1e