14

我是 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/3采用参数列表 (和)的 spawn 函数spawn/4也采用模块名称。但我不想 export bar/1,因为它只在内部使用,永远不需要从模块外部调用。

如何在不导出的情况下生成带有参数的函数?

4

1 回答 1

22

你可以像这样把调用放在另一个里面fun

spawn(fun() -> bar("alice") end)
于 2011-08-02T21:28:44.517 回答