我试图将docstring与使用@eval
宏定义的函数相关联;我还希望使用符号来动态生成文档字符串。
for (f, name) in ((:add, :addition), ... )
@eval begin
@doc "Documentation for $name" ->
function f(args)
## FUNCTION BODY
end
end
end
虽然我可以在$name
语句中成功引用@eval
,但我无法在文档字符串本身中引用$name
。它给出了错误UndefVarError: name not defined
。
1)有没有办法让它发挥作用?我已经尝试了多种方法来摆脱@doc
范围并获取周围范围内的变量,但我还没有成功。
2)->
语法的本质是什么?
我从Github获得了->
语法,但是在Julia文档中我没有提到它,甚至在使用Julia的同时,我还没有遇到过它。
答案 0 :(得分:3)
由@jverzani链接,所需要的只是额外的$
。表达式插值需要一个$
,字符串插值需要另一个for (f, name) in ((:add, "addition"), (:sub, "subtraction"), ...)
@eval begin
@doc """
This is the function $($name)
"""
function $f()
## FUNCTION BODY
end
end
end
。最终代码如下:
eol
一旦你知道答案就超级简单......
答案 1 :(得分:1)
正如@scls所指出的那样,需要对Julia 0.5稍作修改。从文档的Advanced Usage部分开始,上面的示例现在应该类似于
for (f,n) in ((:foo, "foo"), (:bar, "bar"))
@eval begin
@doc "This is the function $($n)" $f
function $f()
println($n)
end
end
end
```