On Tue, Dec 15, 2015 at 4:17 PM,  <amik...@gmail.com> wrote:
> This works and makes perfect sense, thank you. May I bother you one more
> time? I want to generate these functions for a lot of operators, I create an
> Array containing them all and I loop over them to apply the macro:

The macro expansion happens before the loop runs so no.
If you want to do this in a loop you should use `eval`. Either the
version Erik mentioned earlier or you can evaluate your macro call as
well

Sth like `@eval @operator_obs $o` should work.

>
> macro operator_obs(name)
>     dname = symbol(".$name")
>     return quote
>         function $(esc(name))(m1::M, m2::M)
>             return M($(esc(dname))(m1.a, m2.a), $(esc(dname))(m1.b, m2.b))
>         end
>     end
> end
>
> ol = [+, -, *, /, ^]
>
> for o in ol
>     @operator_obs(o)
> end
>
> This won't work anymore because Julia complains that ERROR: LoadError:
> UndefVarError: .o not defined, which I understand. Is there any way to
> circumvent that?

Reply via email to