You can use the esc 
<http://julia.readthedocs.org/en/latest/stdlib/base/?highlight=esc#Base.esc> 
function 
that can introduce variables in the calling environment

julia> type Point
           x
           y
       end

julia> macro fetch(p)
           variables = quote
               x = $p.x
               y = $p.y
           end
           return esc(variables)
       end

julia> p = Point(5, 10)
Point(5,10)

julia> x
ERROR: x not defined

julia> y
ERROR: y not defined

julia> @fetch p;

julia> x
5

julia> y
10



On Saturday, June 7, 2014 2:35:59 AM UTC-5, Andrew Simper wrote:
>
> A lot of the time it is good to copy a structure to local variables and 
> then process on those for efficiency before storing the local values back 
> to a structure. To help out with this I'm trying to write  a macro, so this 
> is what I would like the end result to be:
>
> Point
>     x::Float64
>     y::Float64
> end
>
> function process (p::Point)
>     local x = p.x;
>     local y = p.y;
>     # do some processing on x and y
>     p.x = x
>     p.y = y
> end
>
> and I would like write a macro that does this so the end code would like 
> like:
>
> function process (p::Point)
>     @fetch p
>     # do some processing on x and y
>     @store p
> end
>
> So far I've got this working at the REPL using:
>
> point = Point (1, 2)
> map (eval, ([:($name = point.$name) for name in names(point)]))
> println("x=$(x) y=$(y)")
>
> which prints out: x=1.0 y=2.0
>
> Can someone please help out turning this into a macro?
>
>

Reply via email to