2012-04-06 32 views
5

En ERLANG: Supongamos que tenemos una función f() que toma F1 como entradas donde F1 es una función. ¿Hay alguna manera de saber la cantidad de parámetros de entrada de F1?Conocer el número de parámetros de una función pasada (erlang)

Creo que de alguna manera HAY una solución, pero no estoy seguro. por ejemplo:

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

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

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

Así que, ¿hay alguna manera para la función de marcha/1 a conocer la información acerca de la función pasada [sobre todo el número de parámetros de entrada de la función pasada].

Nota: tenga en cuenta que esta es una pregunta teórica. Nota: es el código de aplicar (diversión, [argumentos]) disponible en código abierto ... esto puede ayudarme, supongo.

Respuesta

12

erlang: fun_info (Diversión, arity).

Por ejemplo

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

Puede utilizar module_info/1 para obtener información sobre su módulo.

module_info/1

La llamada module_info(Key), donde Key es un átomo, devuelve una sola pieza de información sobre el módulo.

Los siguientes valores están permitidos para Key:

...

exports devuelve una lista de {Nombre, Arity} tuplas con todas las funciones exportadas en el módulo.

functions Devuelve una lista de tuplas {Nombre, Arity} con todas las funciones del módulo.

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. 
Cuestiones relacionadas