本文介绍了Julia v0.6宏内部函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人可以解决我遇到的这个宏错误,它仅在版本0.6中才开始发生:

Can someone resolve this macro error I'm having, it only started happening in version 0.6:

mutable struct Foo
    x::Int
end

macro test(myfoo)
    quoteblock =
    quote
    myfoo.x += 1
    end

    return quoteblock
end

function func(myfoo)
    @test myfoo
    println(myfoo.x)
end

foo = Foo(3)
func(foo)

从理论上讲,这应该只在编译时用myfoo.x += 1替换函数func中的行@test myfoo,这应该可以,但是我得到了错误:

In theory this should just replace the line @test myfoo in the function func with myfoo.x += 1 at compile time, which should work, but instead I get the error:

UndefVarError: myfoo not defined

推荐答案

列出了相应的更改说明此处:

The corresponding change-notes are listed here:

所以答案是逃避myfoo:

macro test(myfoo)
   quote
     $(esc(myfoo)).x += 1
   end
end

这篇关于Julia v0.6宏内部函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-14 16:28