【发布时间】:2020-09-09 11:33:07
【问题描述】:
我正在使用以下函数从 Julia AST 中删除行号:
function filter_lineno(ex::Expr)
filter!(ex.args) do e
isa(e, LineNumberNode) && return false
if isa(e, Expr)
(e::Expr).head === :line && return false
filter_lineno(e::Expr)
end
return true
end
return ex
end
但是当代码中有宏时,这似乎无法正常工作。这是一个失败的例子:
expr = Meta.parse("begin run(``) end")
filter_lineno(expr)
我收到以下错误:
BoundsError: attempt to access 2-element Array{Any,1} at index [3]
处理文档字符串时的另一个例子:
expr = Meta.parse("begin \"Here is the doc\"\nmodule X end end")
filter_lineno(expr)
产生以下结果:
quote
Core.@doc module X
end
end
这个功能有什么问题,我该如何解决?
【问题讨论】:
标签: recursion julia metaprogramming abstract-syntax-tree