A macro can't do this because a macro can't see types. But I don't need a
macro to get an even more efficient version of your attempted optimization.
I just add the immutable keyword:

*immutable* Point
    x::Float64
    y::Float64
end




On Sat, Jun 7, 2014 at 3:35 AM, Andrew Simper <[email protected]>
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