Thanks to Michael's example, I did this other version of the macro: julia> type Foo{T<:Number} x::Vector{T} end
julia> macro foo_op(op) quote dot_op = symbol(".$($op)") docstr = "`$($op)` also works for `Foo` types!" function Base.$op(a::Foo, b::Foo) Foo(dot_op(a.x, b.x)) end @doc Markdown.parse(docstr) Base.$op Base.$op end end julia> @foo_op ^ ^ (generic function with 46 methods) help?> ^ search: ^ .^ ^(x, y) Exponentiation operator. ^(s, n) Repeat n times the string s. The repeat function is an alias to this operator. julia> "Test "^3 "Test Test Test " ^ also works for Foo types! El martes, 15 de diciembre de 2015, 10:28:53 (UTC-6), ami...@gmail.com escribió: > > 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, >