2015-12-15 3 views
11

Wenn ich eine Funktion schreibe, die eine andere Funktion übergibt, gibt es eine Möglichkeit, die Arität der Funktion zu überprüfen, die ich übergeben habe, oder Muster mit verschiedenen Aritäten zu vergleichen? Ich könnte is_function/2 verwenden, um nach bestimmten Aritäten zu suchen, aber das wäre ein ungeschickter Weg, um die Nummer zu bekommen.Gibt es eine Möglichkeit, die Funktion einer Funktion in Elixir zu überprüfen?

Antwort

18

Sie können :erlang.fun_info/1; es gibt eine Reihe von Informationen über eine bestimmte Funktion, einschließlich der arity:

iex> :erlang.fun_info(fn -> :ok end)[:arity] 
0 
iex> :erlang.fun_info(fn(_, _, _) -> :ok end)[:arity] 
3 

Da die Dokumentation I sagt verknüpft, wird diese Funktion hauptsächlich für Debugging-Zwecke gedacht ist, aber es kann die arity einer Funktion zu bestimmen.

Verwandte Themen