当阅读github的Project gproc的源代码文件“gproc_lib.erl”时,我遇到了一些问题。 我在哪里可以找到这种语句语法的相关参考文档?
check_option_f(ets_options) -> fun check_ets_option/1; **%<----**What's the meaning of this** statement**?
check_option_f(server_options) -> fun check_server_option/1.
check_ets_option({read_concurrency , B}) -> is_boolean(B);
check_ets_option({write_concurrency, B}) -> is_boolean(B);
check_ets_option(_) -> false.
check_server_option({priority, P}) ->
%% Forbid setting priority to 'low' since that would
%% surely cause problems. Unsure about 'max'...
lists:member(P, [normal, high, max]);
check_server_option(_) ->
%% assume it's a valid spawn option
true.
答案 0 :(得分:5)
fun module:name/arity
是一个函数值,相当于以下内容:
fun(A1,A2,...,AN) -> module:name(A1,A2,...,AN) end
其中N是arity
。简而言之,将普通的Erlang函数作为参数传递给其他函数作为参数是一种有用的简写。
示例:
将列表List
转换为集合:
lists:foldl(fun sets:add_element/2, sets:new(), List).
相当于:
lists:foldl(fun (E, S) -> sets:add_element(E, S) end, sets:new(), L).
(后者是OTP的set
模块中用于from_list
函数的定义。)
更多信息here。