如果我正在编写一个传递另一个函数的函数,有没有办法检查我传递的函数的arity,或者模式匹配不同的arities?我可以使用is_function/2来检查特定的arities,但这将是一个获取数字的尴尬方式.
wha*_*ide 25
你可以用:erlang.fun_info/1; 它返回一堆关于给定函数的信息,包括它的arity:
iex> :erlang.fun_info(fn -> :ok end)[:arity]
0
iex> :erlang.fun_info(fn(_, _, _) -> :ok end)[:arity]
3
Run Code Online (Sandbox Code Playgroud)
正如我链接的文档所说,此函数主要用于调试目的,但它可用于确定函数的arity.
小智 7
:erlang.fun_info/1 如果您有对该函数的引用,则有利于找到 arity。
如果您想弄清楚函数具有哪些参数,但没有对其的引用(因为参数是函数标识的一部分),则有两种方法。
如果你想知道它是否支持特定的 arity:erlang.function_exported/3采用模块、函数名称 (sans-arity) 和 arity:
:erlang.function_exported(IO, :puts, 7) #=> false
:erlang.function_exported(IO, :puts, 2) #=> true
如果你想知道一个函数支持的所有参数,你可以使用模块的__info__元数据函数:
:functions |> IO.__info__ |> Keyword.get_values(:puts) #=> [1,2]
| 归档时间: |
|
| 查看次数: |
1255 次 |
| 最近记录: |