2015-08-16 7 views

Odpowiedz

11

Można użyć Kernel.apply/3.

apply(Enum, :reverse, [[1, 2, 3]]) 

Przykład:

Z modułem jak ten:

defmodule Apply do 
    def dynamic(method_name, params) do 
    apply(Apply, method_name, params) 
    end 

    def method1(params) do 
    IO.puts "Method 1, called by " <> params 
    end 

    def method2(params) do 
    IO.puts "Method 2, called by " <> params 
    end 
end 

mogę powołać specyficzną funkcję za pomocą jego nazwa:

iex(1)> c("apply.ex") 
[Apply] 

iex(2)> Apply.dynamic(:method1, ["Hey"]) 
Method 1, called by Hey 
:ok 

iex(3)> Apply.dynamic(:method2, ["Hey"]) 
Method 2, called by Hey 
:ok 
+0

Dziękuję za pomoc :) – JustMichael

+0

'apply' jest podobne do' public_send'. Byłoby to podobne do wysyłania, gdyby można było wywołać prywatną funkcję z dowolnego miejsca, prawda? – Eduardo