Something to note about Tom's method is that the name function must be passed to gf as a symbol, unlike in the case of a macro. However, in most cases this slight difference probably will not warrant a macro.
On Friday, May 29, 2015 at 8:58:56 PM UTC-4, Tom Lee wrote: > > You don't need to use a macro, a function can do this: > > julia> function gf(n::Symbol = gensym()) > @eval function $(n)() > 1 > end > end > > I've also made the n argument optional, with gensym creating a unique name > by default - the newly defined function is returned by gf, so you don't > necessarily need to know its name. And of course if you give gf additional > arguments you can programatically construct expressions based those and > easily $ them into the @eval block. It's all very awesome. > > But the point is a macro probably isn't appropriate for this type of > thing. My understanding is that you should never use a macro if you can > easily write an equivalent function. > > Cheers, > > Tom > > On Thursday, 28 May 2015 23:26:39 UTC+10, Mauro wrote: >> >> Like this: >> >> julia> macro gf(n) >> quote >> function $(esc(n))() >> 1 >> end >> end >> end >> >> julia> @gf foo >> foo (generic function with 1 method) >> >> julia> foo() >> 1 >> >> On Thu, 2015-05-28 at 12:06, Vasudha Khandelwal <vasudhakh...@gmail.com> >> wrote: >> > Can I use macros to generate functions with names passed as argument to >> the >> > macro? >> >>