macros julia-lang

Julia macros: @__FILE__ @__LINE__ en macro



julia-lang (2)

Este código:

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

imprime fl.jl:2 | m fl.jl:2 | m . ¿Cómo puedo hacer que se imprima fl.jl:4 | m fl.jl:4 | m ?


Aunque puede haber formas más elegantes de hacerlo, si no desea que esto bloquee su progreso en otros frentes, ¿por qué no simplemente pasar el número de línea a la macro ...?

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


Lo siguiente funcionará en la actual Julia todas las noches:

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

Esto fue posible gracias a la siguiente solicitud de extracción de implementación . No es posible en ninguna versión lanzada oficialmente, desafortunadamente.