Comment appeler une méthode de manière dynamique, en Élixir, en spécifiant à la fois du module et le nom de la méthode?
J'aimerais savoir ce qu'est exactement un nom de méthode est en élixir:
array = [1,2,3]
module_name = :lists
method_name = :nth # this not working
module_name.method_name(1, array) # error, undef function lists.method_name/2
module_name.nth(1, array) # returns 1, module_name is OK. It's an atom
Mais je peux faire à peu près la même chose en erlang:
A = [1,2,3].
X = lists.
Y = nth.
X:Y(1,A). # returns 1
Comment puis-je faire dans élixir?
InformationsquelleAutor halfelf | 2012-11-05
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
apply/3
qui est juste un wrapper autour de:erlang.apply/3
. Il a simplement appelle lefunction
etmodule
avec un tableau dearguments
. Puisque vous êtes de passage d'arguments que le module et les noms de fonction, vous pouvez utiliser des variables.Si vous voulez comprendre plus au sujet de comment elixir gère les appels de fonction (et tout le reste), vous devriez jeter un oeil à
quote
etunquote
.qui renvoie le homoiconic représentation de l'appel de la fonction.
Vous pouvez
unquote
la cité de l'appel de fonction avecCode.eval_quoted/3
Edit: voici un exemple d'utilisation d'Enum.chercher avec une var.
module.method
en élixir, droit?:lists.:nth
). Je préfère suffit d'utilisation s'appliquent dans ce cas.Enum.fetch
? Est-il variable des variables ou des fonctions de la variable?