该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 "--"
Run Code Online (Sandbox Code Playgroud)
有趣的是,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
Run Code Online (Sandbox Code Playgroud)
因此,我有几个相关的问题:
-->和:=?(编辑:换句话说,为什么要特别解析那些字符序列?)-->,并:=因此可以用作宏运营商?-->并且:=由 Julia 解析器专门解析。
它列出了所有经过特殊解析的字符序列,我很确定您也可以从中获得关联性。