Re-evaluate function in another module

Not elegant, but:

module A
   export foo
   whoami() = @__MODULE__
   foo = :(eval(:($whoami)))
end 

module B
   # Note that B knows nothing about A
   whoami() = @__MODULE__
end

A.eval(A.foo)()  # Main.A
B.eval(A.foo)()  # Main.B
2 Likes