【问题标题】:Spawning functions without exporting them生成函数而不导出它们
【发布时间】: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/3spawn/4)也采用模块名称。但是我不想导出bar/1,因为它只在内部使用,从不需要从模块外部调用。

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

【问题讨论】:

    标签: erlang export spawn


    【解决方案1】:

    您可以像这样将调用放在另一个 fun 中:

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

    【讨论】:

      猜你喜欢
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多