Julia v0.6中的宏功能中断
看起来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
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,哎哟,需要使用不同的变量名,因此它无法将其识别为全局变量,现在它导致了错误。