Если я пишу функцию, которая получает другую функцию, есть ли способ проверить арность передаваемой функции или совпадение шаблонов с разными объектами? Я мог бы использовать is_function/2 для проверки определенных атрибутов, но это было бы неудобным способом получить номер.
Есть ли способ проверить функциональность в Elixir?
Ответ 1
Вы можете использовать :erlang.fun_info/1
; он возвращает кучу информации о данной функции, включая ее arity:
iex> :erlang.fun_info(fn -> :ok end)[:arity]
0
iex> :erlang.fun_info(fn(_, _, _) -> :ok end)[:arity]
3
Как указано в документации, которую я связываю, эта функция в основном предназначена для целей отладки, но ее можно использовать для определения арности функции.