Hi,
I can't explain the behaviour of this:
macro wtf1()
return esc(
:(begin
@show a
@everywhere const b = a
@show b
end))
end
macro wtf2()
return esc(
:(begin
@show c
const d = c
@show d
end))
end
@everywhere const a = 0
@wtf1
@everywhere const a = 1
@wtf1
@everywhere const a = 2
@wtf1
println()
const c = 0
@wtf2
const c = 1
@wtf2
const c = 2
@wtf2
results in:
a = 0
b = 0
WARNING: redefining constant a
a = 1
WARNING: redefining constant b
b = 0
WARNING: redefining constant a
a = 2
WARNING: redefining constant b
b = 1
c = 0
d = 0
WARNING: redefining constant c
c = 1
WARNING: redefining constant d
d = 1
WARNING: redefining constant c
c = 2
WARNING: redefining constant d
d = 2
Why do the outputs of the two macros differ? Shouldn't it be the same?
And why does julia warn me about the redefinition of b when it doesn't
really redefine it. (line 5 and 6 of the output)