2012-04-06 5 views
5

In ERLANG: Nehmen wir an, wir haben eine Funktion f(), die F1 als Eingaben verwendet, wobei F1 eine Funktion ist. Gibt es eine Möglichkeit, die Anzahl der Eingabeparameter von F1 zu kennen?Die Anzahl der Parameter einer bestandenen Funktion kennen (erlang)

Ich fühle mich irgendwie da ist eine Lösung, aber ich bin mir nicht sicher. zum Beispiel: So

-module(high). 
-compile(export_all). 

f1() -> 1. 
f2(X) -> X. 
f3(X, Y) -> {X,Y}. 

run(F) -> io:format("F ~p ~n", [F]). 

, gibt es eine Möglichkeit für die Funktion Run/1 Informationen über die bestandene Funktion zu wissen [hauptsächlich die Anzahl der Eingabeparameter der übergebenen Funktion].

Hinweis: Bitte beachten Sie, dass dies eine theoretische Frage ist. Hinweis: ist der Code von apply (Spaß, [Argumente]) in Open-Source verfügbar .. das kann mich hep ich denke.

Antwort

12

erlang: fun_info (Spaß, Arity).

Zum Beispiel

F = fun(A,B) -> A+B end. 
#Fun<erl_eval.12.111823515> 
3> erlang:fun_info(F,arity). 
{arity,2} 
0

können Sie module_info/1 verwenden Informationen zu Ihrem Modul zu bekommen.

module_info/1

Der Anruf module_info(Key), wo Key ein Atom ist, gibt ein einziges Stück der Informationen über das Modul.

Folgende Werte werden für Key erlaubt:

...

exports Gibt eine Liste von {Name, Arity} Tupel mit allen exportierten Funktionen im Modul.

functions Gibt eine Liste von {Name, Arity} -Tupel mit allen Funktionen im Modul zurück.

http://erlang.org/doc/reference_manual/modules.html


run(F) -> find_value(F,module_info(exports)). 

find_value(Key, List) -> 
    case lists:keyfind(Key, 1, List) of 
     {Key, Result} -> {Key,Result}; 
     false -> io:format("There is no function called ~w.~n", [Key]) 
    end. 
Verwandte Themen