If you look in the Elixir code, in the “inspect” module, you can see that the output is derived from calling Function.info
. Calling Function.info
on an anonymous function on my machine gives me:
iex(5)> some_function = fn x -> x * x end
#Function<7.126501267/1 in :erl_eval.expr/5>
iex(6)> Function.info(some_function)
[
pid: #PID<0.109.0>,
module: :erl_eval,
new_index: 7,
new_uniq: <<241, 72, 50, 109, 70, 84, 198, 45, 20, 94, 42, 25, 184, 243, 5,
100>>,
index: 7,
uniq: 126501267,
name: :"-expr/5-fun-4-",
arity: 1,
env: [
{[], :none, :none,
[
{:clause, 5, [{:var, 5, :_x@1}], [],
[{:op, 5, :*, {:var, 5, :_x@1}, {:var, 5, :_x@1}}]}
]}
],
type: :local
]
So you can see that the inspect value for the function #Function<7.126501267/1 in :erl_eval.expr/5>
consists of the function’s index
, uniq
and arity
pieces.
According to the documentation on Function.info
:
:index - (integer) an index into the module function table.
:uniq - (integer) a unique value for this function. This integer is
calculated from the compiled code for the entire module.
:arity - (integer) the number of arguments the function is to be called
with.
Now… having figured all that out, it’s still the case that there’s not much the average user can do with that information (well… the arity is useful metadata) - most folks can treat it as a blob of stuff that uniquely identifies the function.