Julia(或包中)是否有一个函数或宏,给定一个函数返回表示其主体的表达式对象(Expr);或者,换句话说,返回其定义中使用的表达式?
例如,假设函数
foo
在某处定义为
function foo(x, y)
z = 2 * x
return z + y
end
然后,假设调用该函数
definition
,调用definition(foo)
应该返回表达式
quote
z = 2 * x
z + y
end
原则上这也适用于匿名函数。
definition(x -> 2 + x)
的返回值应该是表达式
:(2 + x)
我只能找到诸如
@code_lowered
和 @code_typed
之类的宏,这些宏可以在 LLVM 内部表示或本机机器代码级别获取代码,但在表达式级别却找不到。
您可能正在寻找
Meta.parse
(请参阅文档https://docs.julialang.org/en/v1/base/base/#Base.Meta.parse-Tuple{AbstractString,%20Int64}):
julia> foo_text = """function foo(x, y)
z = 2 * x
return z + y
end"""
"function foo(x, y)\n z = 2 * x\n return z + y\nend"
julia> Meta.parse(foo_text)
:(function foo(x, y)
#= none:1 =#
#= none:2 =#
z = 2x
#= none:3 =#
return z + y
end)
注意
Meta.parse
解析文本,而不是函数本身。您可以调用 eval()
来计算 Meta.parse
返回的表达式。