产卵功能无需导出

时间:2011-08-02 21:11:52

标签: erlang export spawn

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

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

1 个答案:

答案 0 :(得分:21)

您可以将呼叫置于另一个fun内,如下所示:

spawn(fun() -> bar("alice") end)