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