为什么在朱莉娅重新定义后,符号操作的顺序仍然存在?

Wan*_*ang 3 julia

在Julia中,我们可以重新定义运算符,如+,×,sin,cos等.但有一件有趣的事情是,在重新定义之后,所有修改过的运算符之间的顺序仍然存在,比如乘法仍然在求和之前,无论你如何重新定义自己的函数,为什么?

Mat*_* B. 7

这只是为中缀运算符定义运算符优先级的函数.您可以在手册中找到优先级表.优先级定义了如何将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)

  • [朱莉娅/ SRC /朱莉娅 - parser.scm](https://github.com/JuliaLang/julia/blob/a108f059cbfa8eae9e8a844c8c4bb2e06a13aa3a/src/julia-parser.scm#L1-L31) (2认同)