2017-06-09 39 views
6

ten kod:Julia makra: @__FILE__ @__LINE__ makro

macro FL(message) 
    return @sprintf("%s:%d | %s", @__FILE__, @__LINE__, message) # line 2 
end 
println(@FL("m")) # line 4 

wydruków fl.jl:2 | m. Jak mogę go wydrukować fl.jl:4 | m?

+0

Witam @Rolf, Sformatowałem kod w przecenie. Sprawdź go, aby upewnić się, że znaczenie jest zachowane, biorąc pod uwagę, że numery linii są tutaj ważne. – phg

+1

@phg W julia "#" oznacza początek komentarza, a nie '//'. Proponuję, abyście opuścili formatowanie kodu dla osób znających ten język - chociaż doceniam, że został komentarz dla osoby pytającej. –

+0

@LyndonWhite Wiem, Julia. Po prostu programuję też w wielu innych językach;) Dzięki za poprawkę! – phg

Odpowiedz

3

Choć nie może być bardziej elegancki sposób, aby to zrobić, jeśli nie chcesz, aby zablokować postęp na innych frontach, dlaczego po prostu nie przechodzą numer linii do makra ...

macro FL(message, line) 
    return @sprintf("%s:%d | %s", @__FILE__, line, message) 
end 
println(@FL("m", @__LINE__)) 
+0

Dziękuję za odpowiedź. Oczywiście to jest rozwiązanie. Ale chcę tego uniknąć, szczególnie dlatego, że chcę dodać @__FILE__. –

+0

Następnie możesz po prostu dodać '@__ FILE__' jako argument. – houtanb

4

następujące będzie działać w obecnym Julia nocnej:

macro FL(message) 
    return :(@sprintf("%s:%d | %s", $(string(__source__.file)), $(__source__.line), $(esc(message)))) # line 2 
end 
println(@FL("m")) # line 4 

było to możliwe dzięki następującym implementation pull request. Niestety, nie jest to możliwe w żadnej oficjalnie wydanej wersji.

+0

Dziękuję za odpowiedź. Niestety nie każę Julii biegać. Otrzymuję: CommandLine Error: Opcja "help-list" zarejestrowana więcej niż raz! LLVM ERROR: niespójność w zarejestrowanych opcjach wiersza poleceń. Spróbuję znaleźć to. –

+0

Wynika to z wielu wersji LLVM załadowanych w tym samym procesie. IIRC są otwarte problemy w bazie Julia i OpenCL.jl o tym (nie jestem pewien, czy jakakolwiek rozdzielczość). –