我经常看到人们使用arity 0(无参数)生成新函数:
spawn_link(fun function_name/0).
其中function_name / 0可以是例如:
function_name() ->
io:format("hello~n", [])
end.
我能以类似的方式产生一个带参数的函数吗?例如:
function_name(Arg) ->
io:format("hello ~p ~n", [Arg])
end.
我应该使用
spawn_link(Module, Function, Arg)
或其他什么?
答案 0 :(得分:6)
您可以将spawn_link
与参数一起使用,使用指定的参数构建lambda函数(fun
)或仅使用固定的参数。例如,您可以使用,如您所说:
spawn_link(Module, Function, Args).
或在您的模块中导出您自己的spawn_link
(或start
):
spawn_link(Args) ->
spawn_link(?MODULE, fun myfun/X, Args).
或使用fun
:
spawn_link(Args) ->
spawn_link(fun () -> apply(fun myfun/X, Args) end).
或者如果您在内部使用固定参数调用某个函数:
spawn_link() ->
spawn_link(fun () -> myfun(1,2,3) end).
其中X
在这种情况下是每种情况下myfun
函数的arity。