定义在函数里的宏提示错误

需求

给定一个定义在函数里的宏,能实现功能。

代码

function add(x, y)
    return x + y
end

macro run_process(content)
    return quote
        if x != y
            $(content)
        end
    end
end

function fun_runprocess(x, y)
    @run_process :(z = add(x, y))
    return z
end

input1 = 3
input2 = 4
fun_runprocess(input1, input2)
println(z)

输出结果:


ERROR: LoadError: UndefVarError: x not defined
Stacktrace:
 [1] fun_runprocess(x::Int64, y::Int64)
   @ Main ~/test/runtests2.jl:7
 [2] top-level scope
   @ ~/test/runtests2.jl:20
in expression starting at ………../test/runtests2.jl:20

问题

如输出结果所示,提示x未定义。那么需要如何改才能实现正常输出z=input1+input2=3+4=7 ?

macro run_process(content)
    return esc(quote
        if x != y
            $(content)
        end
    end)
end

function fun_runprocess(x, y)
    @run_process z = add(x, y)
    return z
end
1 个赞