For the macro problem, note that arguments of macro are expressions, or
Symbols:
Just as functions map a tuple of argument values to a return value, macros
> map a tuple of argument expressions to a returned expression. They allow
> the programmer to arbitrarily transform the written code to a resulting
> expression, which then takes the place of the macro call in the final
> syntax tree.
>
macro test(x); dump(x); end
@test var
Symbol var
So you can do something like that:
macro fetch(obj)
quote
local ic1eq = $obj.ic1eq
local ic2eq = $obj.ic2eq
end
end
This will not work however, because of hygiene:
macroexpand (:(@fetch var))
:(begin # /opt/mandelbrot/session-manager/src/Worker.jl, line 3:
local #174#ic1eq = var.ic1eq # line 4:
local #175#ic2eq = var.ic2eq
end)
You just need to escape your quote block:
macro fetch(obj)
quote
local ic1eq = $obj.ic1eq
local ic2eq = $obj.ic2eq
end |> esc
end
You can also look here for a similar question:
https://groups.google.com/forum/#!searchin/julia-users/unpack/julia-users/IQS2mT1ITwU/gEyj6JNJsuAJ