julia-lang定义新运算符| =或|> =

时间:2017-02-02 03:34:37

标签: operators julia

a += 1相当于a = a + 1

我希望a |>= √a |= √等同于a = a |> √。我可以定义这些新的运算符吗?

1 个答案:

答案 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