可用作宏中运算符的ASCII字符序列

Cam*_*nek 7 julia

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)

因此,我有几个相关的问题:

  1. 用什么的了-->:=?(编辑:换句话说,为什么要特别解析那些字符序列?)
  2. 是行为相似的ASCII字符还有其他的序列-->,并:=因此可以用作宏运营商?
  3. 是否有文档列出了各种“特殊” ASCII字符序列?

Ans*_*hvi 4

-->并且:=由 Julia 解析器专门解析。

看看这个文件: https://github.com/JuliaLang/julia/blob/f54cdf45a9e04f1450ba22142ddac8234389fe05/src/julia-parser.scm

它列出了所有经过特殊解析的字符序列,我很确定您也可以从中获得关联性。