No, in that example you create an anonymous function. I'm not certain on 
the semantics, but "n" effectively points to this nameless function. 
Anonymous functions are not as fast as "generic" ones (at least in 0.3, at 
least sometimes) and you cannot add new methods to them for multiple 
dispatch (as far as I know).

Also, I should clarify that when I wrote "My understanding is that you 
should never use a macro if you can easily write an equivalent function" I 
meant you should not create a new macro to do something that can just as 
easily be done by a function - not that existing macros like @eval should 
be avoided.

On Sunday, 31 May 2015 21:45:46 UTC+10, Kevin Squire wrote:
>
> 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 <dpsa...@gmail.com 
> <javascript:>> 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? 
>>>>>>
>>>>>>
>

Reply via email to