Есть ли способ проверить функциональность в Elixir?

Если я пишу функцию, которая получает другую функцию, есть ли способ проверить арность передаваемой функции или совпадение шаблонов с разными объектами? Я мог бы использовать is_function/2 для проверки определенных атрибутов, но это было бы неудобным способом получить номер.

Ответ 1

Вы можете использовать :erlang.fun_info/1; он возвращает кучу информации о данной функции, включая ее arity:

iex> :erlang.fun_info(fn -> :ok end)[:arity]
0
iex> :erlang.fun_info(fn(_, _, _) -> :ok end)[:arity]
3

Как указано в документации, которую я связываю, эта функция в основном предназначена для целей отладки, но ее можно использовать для определения арности функции.