Good catch! But a quote-block and :() should be equivalent, right? Is this a bug?
The trouble is that my use-case, I have two lines of code and then the :()-trick doesn't work anymore because it get translated into a quote-block: julia> eval(:(x=1; module MO end)) ERROR: invalid method definition: not a generic function On Wed, 2014-01-29 at 21:08, [email protected] wrote: > The problem seems to have to do with it getting wrapped in a quote block. > > ~~~ > julia> quote module MO end end > quote # none, line 1: > $(Expr(:module, true, :MO, quote > eval(x) = top(Core).eval(MO,x) > eval(m,x) = top(Core).eval(m,x) > end)) > end > > julia> :(module MO end) > :($(Expr(:module, true, :MO, quote > eval(x) = top(Core).eval(MO,x) > eval(m,x) = top(Core).eval(m,x) > end))) > > julia> eval(quote module MO end end) > ERROR: invalid method definition: not a generic function > > julia> eval(:(module MO end)) > Warning: replacing module MO > ~~~ > > > On Wed, Jan 29, 2014 at 2:13 PM, Mauro <[email protected]> wrote: > >> As far as I can tell, below macro is the identity-macro and works for >> everything I tried but for module definitions. Why? In fact, I >> struggle to get a module definition working within a macro. >> >> julia> macro id(ex) >> :($(esc(ex))) >> end >> >> julia> @id x=5 >> 5 >> julia> @id type MT end >> >> julia> @id module MO end >> ERROR: invalid method definition: not a generic function >> >> Second example: >> >> macro typ(ex) # this works and produces type TY >> :(esc(type TY end)) >> end >> >> macro mod(ex) # this doesn't >> :(esc(module MO end)) >> end >> >> ERROR: syntax: malformed module expression >> >> Is there a way to define modules within macros? >> -- Sent with my mu4e
