命令宏

Version >= 0.6.0-dev

在 Julia v0.6 及更高版本中,除常规字符串宏外,还支持命令宏。一个命令宏调用就好

mymacro`xyz`

被解析为宏调用

@mymacro_cmd "xyz"

请注意,这与字符串宏类似,除了使用 _cmd 而不是 _str

我们通常使用命令宏代码,在许多语言中,代码宏经常包含 " 但很少包含`。例如,使用命令宏重新实现简单版本的 quasiquoting 是相当简单的 :

macro julia_cmd(s)
    esc(Meta.quot(parse(s)))
end

我们可以使用内联的这个宏:

julia> julia`1+1`
:(1 + 1)

julia> julia`hypot2(x,y)=x^2+y^2`
:(hypot2(x,y) = begin  # none, line 1:
            x ^ 2 + y ^ 2
        end)

或多线:

julia> julia```
       function hello()
           println("Hello, World!")
       end
       ```
:(function `hello()` # none, line 2:
        println("Hello, World!")
    end)

支持使用 $ 进行插值:

julia> x = 2
2

julia> julia`1 + $x`
:(1 + 2)

但这里给出的版本只允许一个表达式:

julia> julia```
       x = 2
       y = 3
       ```
ERROR: ParseError("extra token after end of expression")

但是,扩展它以处理多个表达式并不困难。