Julia 使用@eval在docstring中进行元编程

Julia 使用@eval在docstring中进行元编程,julia,Julia,我试图将docstring与用@eval宏定义的函数相关联;我还希望使用符号动态生成docstring for (f, name) in ((:add, :addition), ... ) @eval begin @doc "Documentation for $name" -> function f(args) ## FUNCTION BODY end end end 虽然我可以从@eval语句中

我试图将docstring与用
@eval
宏定义的函数相关联;我还希望使用符号动态生成docstring

for (f, name) in ((:add, :addition), ... )
    @eval begin
        @doc "Documentation for $name" ->
        function f(args)
             ## FUNCTION BODY
        end
    end
end
虽然我可以从
@eval
语句中成功引用
$name
,但无法从docstring本身中引用
$name
。它给出错误
UndefVarError:name未定义

1) 有没有办法让它发挥作用?我已经尝试了许多方法来摆脱
@doc
范围,并获得对周围范围中变量的访问,但我没有成功

2)
->
语法的性质是什么?

我从Github获得了
->
语法,但是在Julia文档中找不到它,即使使用Julia有一段时间了,我以前也没有遇到过它

正如@jverzani所链接的,所需要的只是额外的
$
。一个
$
用于表达式插值,另一个用于字符串插值。最终代码如下:

for (f, name) in ((:add, "addition"), (:sub, "subtraction"), ...)
    @eval begin
        @doc """
        This is the function $($name)
        """
        function $f()
            ## FUNCTION BODY
        end
    end
end

超级简单一旦你知道答案

正如@SCL所指出的,对于Julia 0.5,这需要稍微修改。从文档的部分来看,上面的示例现在应该是

for (f,n) in ((:foo, "foo"), (:bar, "bar"))
    @eval begin
                @doc "This is the function $($n)" $f
        function $f()
            println($n)
        end
    end
end
```

这可能有助于(:add,“addition”),(:sub,“subtraction”)@eval begin@doc“”中的(f,name)的Julia 0.5
“这是函数$($name)”,“函数$f()##函数体结束
引发
错误:加载错误:无效的@var语法“这就是函数”。
删除@doc修复此错误。。。但是docstring
?add
不会出现。有什么想法吗?