Julia v0.6中的宏功能中断

Julia v0.6中的宏功能中断,julia,Julia,看起来Julia v0.6破坏了一些我想要恢复的功能 假设我有宏、结构和函数: macro juliadots(expr::Expr) expr = :(print_with_color(:red, " ●"); print_with_color(:green, "●"); print_with_color(:blue, "● "); print_with_color(:bold, $expr

看起来Julia v0.6破坏了一些我想要恢复的功能

假设我有宏、结构和函数:

macro juliadots(expr::Expr)
    expr = :(print_with_color(:red, " ●");
                print_with_color(:green, "●");
                print_with_color(:blue, "● ");
                print_with_color(:bold, $expr))
    return expr
end

struct Foo
    x::String
end

function func(foo)
    @juliadots "$(foo.x)\n"
end

myfoo = Foo("hello")
func(myfoo)
这过去是有效的,但现在我得到了错误:

ERROR: UndefVarError: myfoo not defined

如何在Julia v0.6中恢复此功能?

我找不到与此对应的任何更改注释,但快速修复方法可能是:

# Julia-v0.6
julia> func(foo) = @juliadots :($("$(foo.x)\n"))
func (generic function with 1 method)

julia> @macroexpand @juliadots :($("$(foo.x)\n"))
quote 
    (Main.print_with_color)(:red, " ●")
    (Main.print_with_color)(:green, "●")
    (Main.print_with_color)(:blue, "● ")
    (Main.print_with_color)(:bold, "$(foo.x)\n")
end

# Julia-v0.5
julia> func(foo) = @juliadots "$(foo.x)\n"
func (generic function with 1 method)

julia> macroexpand(:(@juliadots "$(foo.x)\n"))
quote 
    print_with_color(:red," ●")
    print_with_color(:green,"●")
    print_with_color(:blue,"● ")
    print_with_color(:bold,"$(foo.x)\n")
end

是的,根据Gnimuc的代码,如果您这样编写宏:

julia> macro juliadots(ex::Expr)
   expr = :(print_with_color(:red, " ●");
               print_with_color(:green, "●");
               print_with_color(:blue, "● ");
               print_with_color(:bold, :($($(ex)))))
   return expr
end

julia> func(myfoo)
●●● hello

请参阅此处,了解为何需要此选项的讨论:

在此处工作正常,您的版本信息是什么?@Gnimuc,哎哟,需要使用不同的变量名,因此它无法将其识别为全局变量,现在它导致了错误。