【发布时间】:2011-10-18 14:53:50
【问题描述】:
我是 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,因为它只在内部使用,从不需要从模块外部调用。
如何在不导出的情况下生成带参数的函数?
【问题讨论】: