RecipesBase.jl @recipe
宏使用了几个由 ASCII 字符构成的特殊运算符,即 -->
和 :=
.这些字符序列似乎有一些特殊的属性,可以将它们解析为 Expr
.比较 -->
至 --
:
julia> 1 --> 2
ERROR: syntax: invalid syntax 1 --> 2
julia> 1 -- 2
ERROR: syntax: invalid operator "--"
julia> :(1 --> 2)
:($(Expr(:-->, 1, 2)))
julia> :(1 -- 2)
ERROR: syntax: invalid operator "--"
有趣的是,
1 --> 2
用 :-->
的表达式头解析, 而其他二元运算符,包括 Unicode 二元运算符,例如 ↑
(类型为 \uparrow
+ TAB
),被解析为表达式头 :call
:julia> dump(:(1 --> 2))
Expr
head: Symbol -->
args: Array{Any}((2,))
1: Int64 1
2: Int64 2
julia> dump(:(1 ↑ 2))
Expr
head: Symbol call
args: Array{Any}((3,))
1: Symbol ↑
2: Int64 1
3: Int64 2
所以,我有几个相关的问题:
-->
和 :=
? (编辑:换句话说,为什么要特别解析这些字符序列?)-->
和 :=
因此可以在宏中用作运算符吗? 最佳答案
-->
和 :=
由 Julia 解析器专门解析。
看看这个文件:
https://github.com/JuliaLang/julia/blob/f54cdf45a9e04f1450ba22142ddac8234389fe05/src/julia-parser.scm
它列出了所有经过特殊解析的字符序列,我很确定您也可以从中获得关联性。
关于julia - 可用作宏中运算符的 ASCII 字符序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58365731/