有关更多信息Erlang中的产卵功能

use*_*836 2 erlang

我经常看到人们使用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)

或者是其他东西?

Die*_*lla 6

您可以将它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在每种情况下的功能.