> but top-level definitions in a module are special. In what way? Does using @eval also creates "top-level definitions"?
On Tuesday, December 15, 2015 at 12:31:30 PM UTC-5, Erik Schnetter wrote: > > Yes, this totally looks as if it should work... but top-level definitions > in a module are special. I would use a function that calls eval instead of > a macro: > > function operator_ops(name) > @eval $name(m1::M, m2::M) = M($name(m1.a, m2.a), ($name)(m1.b, m2.b)) > end > > operator_ops(:+) > > -erik > > > On Tue, Dec 15, 2015 at 11:28 AM, <[email protected] <javascript:>> wrote: > >> Hello, >> >> I have a type M and I would like to redefine all the operations *, +, -, >> / etc. over it. Since it would be everytime the same operations and since I >> want my code to be concise I thought about using a macro to define them, >> such as: >> >> type M >> a >> b >> end >> >> macro operator_obs(name) >> return quote >> function $name(m1::M, m2::M) >> return M($name(m1.a, m2.a), $name(m1.b, m2.b)) >> end >> end >> end >> >> @operator_obs(+) >> >> m1 = M(2.0,3.0) >> m2 = M(4.0,5.0) >> >> +(m1, m2) >> >> But this doesn't seem to work. What did I do wrong? >> >> Many thanks, >> > > > > -- > Erik Schnetter <[email protected] <javascript:>> > http://www.perimeterinstitute.ca/personal/eschnetter/ >
