用户定义的中缀运算符



我知道Julia中的运算符只是标准函数,我可以使用普通前缀调用语法:

julia> +(1, 2)
3

然而,它们也很特别,因为它们可以(而且通常(用作中缀运算符:

julia> 1+2
3


我可以定义自己的中缀运算符吗?如果是,如何

例如:

julia> α(x, y) = x+y
α (generic function with 1 method)
julia> α(1, 2)
3 # as expected
julia> 1α2
# expected result: 3
ERROR: UndefVarError: α2 not defined
Stacktrace:
[1] top-level scope at REPL[5]:1
julia> 1 α 2
# expected result: 3
ERROR: syntax: extra token "α" after end of expression
Stacktrace:
[1] top-level scope at REPL[5]:0

正如您所说,运算符只是标准函数,您可以定义和否则像任何其他函数一样进行操作。然而,Julia的解析器是被配置为将某一组符号识别为中缀运算符;如果你定义一个名称为这些符号之一的函数,它将被解析为中缀运算符。

例如:

julia> ⊕(x, y) = x+y
⊕ (generic function with 1 method)
# standard prefix function call
julia> ⊕(1, 2)
3
# infix operator call
julia> 1⊕2
3
julia> 1 ⊕ 2
3


被识别为中缀运算符的符号列表(以及相关的优先级(可以在Julia分析器源密码对于该列表大部分是unicode类别Sm(Symbol,数学(。

目前,它包括例如:

  • 以与+相同的优先级解析:
+ - ⊕ ⊖ ⊞ ⊟ ∪ ∨ ⊔ ± ∓ ∔ ∸ ≏ ⊎ ⊻ ⊽ ⋎ ⋓ ⧺ ⧻ ⨈ ⨢ ⨣ ⨤ ⨥ ⨦
⨧ ⨨ ⨩ ⨪ ⨫ ⨬ ⨭ ⨮ ⨹ ⨺ ⩁ ⩂ ⩅ ⩊ ⩌ ⩏ ⩐ ⩒ ⩔ ⩖ ⩗ ⩛ ⩝ ⩡ ⩢ ⩣
  • 以与*相同的优先级解析:
* / ÷ % & ⋅ ∘ × ∩ ∧ ⊗ ⊘ ⊙ ⊚ ⊛ ⊠ ⊡ ⊓ ∗ ∙ ∤ ⅋ ≀ ⊼ ⋄ ⋆ ⋇
⋉ ⋊ ⋋ ⋌ ⋏ ⋒ ⟑ ⦸ ⦼ ⦾ ⦿ ⧶ ⧷ ⨇ ⨰ ⨱ ⨲ ⨳ ⨴ ⨵ ⨶ ⨷ ⨸ ⨻
⨼ ⨽ ⩀ ⩃ ⩄ ⩋ ⩍ ⩎ ⩑ ⩓ ⩕ ⩘ ⩚ ⩜ ⩞ ⩟ ⩠ ⫛ ⊍ ▷ ⨝ ⟕ ⟖ ⟗

最新更新