erlang - 生成函数而不导出它们

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

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

最佳答案

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

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

关于erlang - 生成函数而不导出它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6918671/

相关文章:

erlang - 当 epmd 端口打开时,最坏的情况是什么?

ruby-on-rails - RAILS - 将参数传递给 Rake 任务

powershell - 使用 powershell 导出 azure db 时出现错误

batch-file - Google Sketchup 中是否有命令行可以导出为 3ds 或 fbx 格式?

Linux 进程生成/创建触发器

functional-programming - 在 Erlang 中同时绑定(bind)元组及其解构元素

Erlang:如何限制分配给进程的内存

node.js - 无法使用交互式脚本获取 child_process.spawn 的输出

node.js - 夜巡在 browser.end() 之后不会终止

Erlang 主管 : how to check if all the workers have replied