2017-06-09 1 views
6

Dieser Code:Julia Makros: @__FILE__ @__LINE__ in Makro

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

druckt fl.jl:2 | m. Wie kann ich es drucken fl.jl:4 | m?

+0

Hallo @Rolf, ich formatierte Sie Code in Markdown. Bitte überprüfen Sie es, um sicherzustellen, dass die Bedeutung erhalten bleibt, da die Zeilennummern hier wichtig sind. – phg

+1

@phg In Julia '# 'markiert Beginn des Kommentars, nicht' // '. Ich schlage vor, dass Sie den Umformatierungscode Personen überlassen, die die Sprache beherrschen - obwohl ich weiß, dass Sie einen Kommentar für den Fragesteller hinterlassen haben. –

+0

@LyndonWhite Ich kenne Julia. Ich programmiere gerade auch in vielen anderen Sprachen;) Danke für die Korrektur! – phg

Antwort

3

Obwohl es kann elegantere Wege, dies zu tun, wenn Sie dies nicht möchten, dass Ihre Fortschritte an anderen Fronten blockieren, warum nicht nur die Zeilennummer an das Makro übergeben ...

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

Vielen Dank für Ihre Antwort. Natürlich ist das eine Lösung. Aber ich möchte das vermeiden, vor allem weil ich @__FILE__ hinzufügen möchte. –

+0

Dann können Sie auch '@__ FILE__' als Argument hinzufügen. – houtanb

4

im folgenden wird jede Nacht in der aktuellen Julia arbeiten:

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

Dies wird durch die folgenden implementation pull request möglich gemacht wurde. Es ist leider in keiner offiziell freigegebenen Version möglich.

+0

Vielen Dank für die Antwort. Leider bekomme ich Julia nicht zum Laufen. Ich bekomme: CommandLine Error: Option 'help-list' mehrfach registriert! LLVM FEHLER: Inkonsistenz in registrierten Befehlszeilenoptionen. Ich werde versuchen, das herauszufinden. –

+0

Das liegt an mehreren LLVM-Versionen, die im selben Prozess geladen wurden. IIRC gibt es offene Probleme in Julia Base und OpenCL.jl darüber (nicht sicher, ob irgendeine Auflösung). –