我是 erlang 的新手,对以下情况有点头疼:
拿这个代码:
-module (so).
-export ( [foo/0] ).
bar () ->
receive
die -> ok;
Msg -> io:format ("I say ~p.~n", [Msg] )
end.
bar (Name) ->
receive
die -> ok;
Msg -> io:format ("~s says ~p.~n", [Name, Msg] )
end.
foo () ->
Bar = spawn (fun bar/0),
Bar ! "Hello",
Bar ! die,
Baz = spawn (?MODULE, bar, ["Alice"] ), % bar/1 not exported
Baz ! "Hello",
Baz ! die.
该进程产生于
spawn/1
工作正常,但第二个进程产生于 spawn/3
由于我没有导出 bar/1
,所以按预期失败因此我得到{undef,[{so,bar,["Alice"]}]}
.两个采用参数列表的 spawn 函数( spawn/3
和 spawn/4
)也采用模块名称。但我不想导出 bar/1
,因为它只在内部使用,从不需要从模块外部调用。如何在不导出的情况下生成带有参数的函数?
最佳答案
您可以将调用放入另一个 fun
像这样:
spawn(fun() -> bar("alice") end)
关于erlang - 生成函数而不导出它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6918671/