Альтернативы Elixir Kernel.apply / 2 и Kernel.apply / 3? - PullRequest
0 голосов
/ 31 октября 2018

Я создаю задачу, которая выполняет функцию динамически. Эта функция отличается каждый раз, как и количество аргументов ([1, "hi", :a]), поэтому я использовал Kernel.apply/2.

defp create_task(f, args) do
    Task.async(fn -> apply(f, args) end)
end

Но я не могу заставить это работать с частными функциями (объявлено с использованием defp):

create_task(&__MODULE__.my_private_fun/3, args)

1 Ответ

0 голосов
/ 31 октября 2018

Если передаваемая вами функция определяется с помощью defp в модуле, то вы не сможете вызвать ее извне. Но вы все равно можете вызвать его, если он находится в том же модуле:

create_task(&my_private_fun/3, args)

Здесь важно отметить, что нельзя обойтись без факта, что вам нужно указывать функцию arity (без макросов), так почему бы просто не вызвать функцию напрямую?

...