Alternatively,
julia> for (offset, f) in enumerate((:foo1, :foo2, :foo3))
@eval begin
function $f(x)
println("This is ", $f)
x + $offset
end
end
end
julia> foo1(0)
This is foo1
1
julia> foo2(0)
This is foo2
2
julia> foo3(0)
This is foo3
3
--Tim
On Wednesday, August 05, 2015 12:48:29 PM Isaiah Norton wrote:
> Can I ask what is your use-case, and whether you've done this in some other
> language? From a quick google there are appear to be some (possibly
> non-standard) C and C++ compiler defines that provide the current function
> name, but other than that:
>
> - Python rejected a PEP for this feature (
> https://www.python.org/dev/peps/pep-3130/)
> - Java does not support it in a first-class way ("could use stacktrace, but
> potentially unreliable")
> - some lisps appear to have interactive mode support for this kind of
> introspection, but nothing general.
>
> The recommended way to solve problems that require this level of
> introspection is to do code generation via metaprogramming.
>
>
> On Wed, Aug 5, 2015 at 12:36 PM, Isaiah Norton <[email protected]>
>
> wrote:
> > No.
> >
> > Ok, technically, you could do this (inspired by
> > https://github.com/JuliaLang/julia/issues/8066#issuecomment-61136584):
> >
> > julia> function foo()
> >
> > bt = backtrace()
> > lookup = ccall(:jl_lookup_code_address, Any, (Ptr{Void}, Int32),
> >
> > bt[2], 0)
> >
> > name = lookup[1]
> > end
> >
> > foo (generic function with 1 method)
> >
> > julia> foo()
> >
> > :foo
> >
> > But that is a really, really bad idea. Please don't do that.
> >
> > On Wed, Aug 5, 2015 at 12:04 PM, Dominique Orban <
> >
> > [email protected]> wrote:
> >> Sorry if this has been asked before. Is it possible to determine the name
> >> of a function inside that function? For example,
> >>
> >> function blah(x)
> >>
> >> my_name = ... # should evaluate to "blah" or :blah
> >>
> >> end
> >>
> >> I didn't see that in the introspection section of the documentation.
> >>
> >> Thanks!