I find that macros are not imported if the package defining the macros are imported within a block. For example, importing Printf and using the macro @printf by
if true
using Printf
@printf("test")
end
produces the following error:
ERROR: LoadError: UndefVarError: @printf not defined
The same error is generated when if true ... end block is replaced with begin ... end block.
The same error is produced for packages other than Printf. For example,
begin
using StaticArrays
@SVector(zeros(3))
end
produces the following error:
ERROR: LoadError: UndefVarError: @SVector not defined
Non-macros are imported fine. For example,
begin
using StaticArrays
SVector(1,2,3)
end
runs fine.
I observe the same behavior in Julia version 1.0 through 1.5. Why is this happening? Is there a way to import macros properly within code blocks? I would like to import some packages within if ... end blocks because importing packages takes time: I don’t want to import them when they are not needed.