Actually, it's name is "n": julia> function getfn() return function(); 1; end end getfn (generic function with 1 method)
julia> const n = getfn() (anonymous function) julia> n() 1 On Sat, May 30, 2015 at 5:09 PM, David P. Sanders <dpsand...@gmail.com> wrote: > > > El domingo, 31 de mayo de 2015, 0:37:45 (UTC+2), Jameson escribió: >> >> But "@eval" is still a macro, so it is even better to rewrite this >> without that: >> function getfn() >> return function(); 1; end >> end >> const n = getfn() >> > > This does not give quite the same answer, though, since the function does > not have a name. > Is there a way to specify the name of a generated function like this? > > >> >> On Sat, May 30, 2015 at 2:30 PM David Gold <david....@gmail.com> wrote: >> >>> 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? >>>>> >>>>>