在Julia中,我们可以重新定义运算符,如+,×,sin,cos等.但有一件有趣的事情是,在重新定义之后,所有修改过的运算符之间的顺序仍然存在,比如乘法仍然在求和之前,无论你如何重新定义自己的函数,为什么?
这只是为中缀运算符定义运算符优先级的函数.您可以在手册中找到优先级表.优先级定义了如何将Julia代码解析为嵌套函数调用序列.您可以使用括号或传统函数调用语法手动指定优先级.
你可以通过让Julia解析(但不执行)代码来看到这种情况.它返回一个带引号的表达式,该表达式以模仿Julia中编写该代码的标准方式的方式打印.有许多工具可以让你检查这个引用的表达式; 一个有助于显示呼叫嵌套的是Meta.show_sexpr.
julia> ex = parse("1 + 2 * 3")
:(1 + 2 * 3)
julia> Meta.show_sexpr(ex)
(:call, :+, 1, (:call, :*, 2, 3))
Run Code Online (Sandbox Code Playgroud)
这只是声明它会在向它添加1之前乘以2*3.这完全基于括号的嵌套结构.无论*其定义如何,任何被约束的函数都将首先被执行.现在将上面的结果与以下内容进行比较:
parse("(1 + 2) * 3")
parse("+(1, *(2, 3))")
parse("*(1, +(2, 3))")
Run Code Online (Sandbox Code Playgroud)