是否有一个内置的朱莉娅功能剥离LineNumberNode的Expr?特别是对于macrocalls:
julia> ex = :(@foo 1)
:(#= REPL[5]:1 =# @foo 1)
julia> dump(ex)
Expr
head: Symbol macrocall
args: Array{Any}((3,))
1: Symbol @foo
2: LineNumberNode
line: Int64 1
file: Symbol REPL[5]
3: Int64 1
Run Code Online (Sandbox Code Playgroud)
试过MacroTools.striplines,但是
julia> ex = :(@foo 1+1)
:(#= REPL[7]:1 =# @foo 1 + 1)
julia> MacroTools.striplines(ex) |> dump
Expr
head: Symbol macrocall
args: Array{Any}((3,))
1: Symbol @foo
2: LineNumberNode
line: Int64 1
file: Symbol REPL[7]
3: Expr
head: Symbol call
args: Array{Any}((3,))
1: Symbol +
2: Int64 1
3: Int64 1
Run Code Online (Sandbox Code Playgroud)
我的用例是比较在不同文件中构造的两个不同的exp(所以不同的行号信息).我目前的解决方法是显式写Expr(:macrocall,Symbol("@ foo"),没有,:(1 + 1))这有点冗长.
内置函数是Base.remove_linenums!:
julia> ex = quote begin
x = 3
y = 2
z = 4
foo(x) = 3
end
end
quote
#= REPL[2]:1 =#
begin
#= REPL[2]:2 =#
x = 3
#= REPL[2]:3 =#
y = 2
#= REPL[2]:4 =#
z = 4
#= REPL[2]:5 =#
foo(x) = begin
#= REPL[2]:5 =#
3
end
end
end
julia> Base.remove_linenums!(ex)
quote
begin
x = 3
y = 2
z = 4
foo(x) = begin
3
end
end
end
Run Code Online (Sandbox Code Playgroud)
感谢 Alex Arslan 提醒我它。
| 归档时间: |
|
| 查看次数: |
175 次 |
| 最近记录: |