2

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

或者是其他东西?

4

1 回答 1

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每种情况下函数的数量。

于 2012-07-02T14:27:44.300 回答