當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。