当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


erlang fun_to_list(Fun)用法及代码示例


erlang:fun_to_list(Fun) -> String :: string()
类型:
Fun = function()

返回 String ,表示创建 Fun 的代码。

String具有以下形式,如果Fun是由一个创建的有趣的表达形式的fun ModuleName:FuncName/Arity

"fun ModuleName:FuncName/Arity"

形式为StringFun是从其他类型创建的有趣的表达方式根据 fun 表达式是在执行编译代码时执行还是在执行未编译代码(未编译的 escripts、Erlang shell 和 erl_eval 模块执行的其他代码)时执行 fun 表达式而有所不同:

compiled code

"#Fun<M.I.U>",其中 M、I 和 U 对应于名为module,indexuniq结果是erlang:fun_info(Fun).

uncompiled code
所有从未编译代码中的 fun 表达式创建的具有相同数量的 fun 都被 fun_to_list/1 映射到相同的列表。
注意

一般情况下不能使用fun_to_list/1检查两个 funs 是否相等fun_to_list/1没有考虑乐趣的环境。看erlang:fun_info/1如何获得一个有趣的环境。

改变

fun_to_list/1 的输出可能因 Erlang 实现而异,并且可能在未来版本中发生变化。

例子:

-module(test).
-export([add/1, add2/0, fun_tuple/0]).
add(A) -> fun(B) -> A + B end.
add2() -> fun add/1.
fun_tuple() -> {fun() -> 1 end, fun() -> 1 end}.
> {fun test:add/1, test:add2()}.
{fun test:add/1,#Fun<test.1.107738983>}

说明:fun test:add/1 可升级,但 test:add2() 不可升级。

> {test:add(1), test:add(42)}.
{#Fun<test.0.107738983>,#Fun<test.0.107738983>}

说明:test:add(1)test:add(42) 具有相同的字符串表示形式,因为未考虑环境。

>test:fun_tuple().
{#Fun<test.2.107738983>,#Fun<test.3.107738983>}

说明:字符串表示形式不同,因为 funs 来自不同的 fun 表达式。

> {fun() -> 1 end, fun() -> 1 end}. > 
{#Fun<erl_eval.45.97283095>,#Fun<erl_eval.45.97283095>}

说明:在未编译代码中从这种形式的 fun 表达式创建的具有相同数量的所有 fun 都被 fun_to_list/1 映射到相同的列表。

相关用法


注:本文由纯净天空筛选整理自erlang.org大神的英文原创作品 fun_to_list(Fun) -> String :: string()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。