AnyMath 文档

与编译器交谈( :元 机制)

在某些情况下,人们可能希望提供给定代码块具有特殊属性的提示或说明:您可能总是想要内联它,或者您可能想要打开特殊的编译器优化传递。 从0.4版本开始,Julia有一个约定,这些指令可以放在一个 :元 表达式,它通常(但不一定)是函数主体中的第一个表达式。

:元 表达式是用宏创建的。 作为一个例子,考虑实施 @内联 宏:

macro inline(ex)
    esc(isa(ex, Expr) ? pushmeta!(ex, :inline) : ex)
end

这里, 预期是定义函数的表达式。 像这样的声明:

@inline function myfunction(x)
    x*(x+3)
end

变成这样的表情:

quote
    function myfunction(x)
        Expr(:meta, :inline)
        x*(x+3)
    end
end

基地。普什梅塔!(ex,标签::联合{Symbol,Expr}) 附加/附加 :标签 到最后 :元 表达,创造一个新的 :元 必要时表达。

要使用元数据,您必须解析这些 :元 表情。 如果你的实现可以在Julia内执行, 基地。波普梅塔! 是非常方便的: 基地。波普梅塔!(正文,:符号) 将扫描一个函数_body_表达式(一个没有函数签名)的第一个 :元 表达式包含 :符号,提取任何参数,并返回一个元组 (发现::Bool,args::数组{Any}). 如果元数据没有任何参数,或 :符号 没有找到, 阿格斯 数组将为空。

尚未提供的是一个方便的解析基础结构 :元 来自C的表达式++.