2017-07-15 7 views
1

Julia v0.6が回復したい機能をいくつか破ったようです。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 

私はジュリアV0でこの機能を回復するにはどうすればよいです。 6?

+0

ここでうまくいきます、あなたのversioninfoは何ですか? – Gnimuc

+0

@Gnimuc、whoopsは異なる変数名を使用してグローバル変数として認識しないようにする必要がありましたが、今度はエラーが発生します。 – Thoth

答えて

1

私はこれに対応する任意の変更のノートを見つけることができませんが、クイックフィックスは、次のようになります。あなたはこのようなあなたのマクロを書く場合

# 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 
2

うん、そう、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 

これがなぜ必要なのかについてはこちらをご覧ください:https://github.com/JuliaLang/julia/issues/15085

関連する問題