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 <[email protected] 
> <javascript:>> 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 <[email protected]> 
>>>> wrote: 
>>>> > Can I use macros to generate functions with names passed as argument 
>>>> to the 
>>>> > macro? 
>>>>
>>>>

Reply via email to