问题 Erlang - 产生进程和传递参数


我一直在努力。我想生成进程并传递参数 他们没有使用MFA表格(模块/函数/参数),所以 基本上无需导出我想要生成的函数 参数。我使用闭包(乐趣)几次绕过这个 并且让参数只是在乐趣之外被绑定的值(然后我在乐趣中引用),但是它 限制我的代码结构...我已经查看了文档并仅生成了 有常规spawn / 1和spawn / 3形式,没有其他...

我理解,如果不使用MFA表单,生成的进程中的代码重新加载是不可能的,但是生成的进程不具有长期运行性并且相对快速地完成,因此这不是问题(我还想在一个模块中包含所有代码) -level函数,子作业被放置在该函数内部的函数中)。

非常感激 谢谢


5095
2018-02-20 21:41


起源



答案:


实际上,理查德指出我正确的方向来避免这个问题(在我对Erlang GoogleGroups提出的同一篇文章的回复中): http://groups.google.com/group/erlang-programming/browse_thread/thread/1d77a697ec67935a

他的回答是:

通过“使用闭包”,我希望你的意思是这样的:

Pid = spawn(fun() - > any_function(Any,Number,Of,Arguments)结束)

这将如何限制您的代码结构?

 /Richard 

谢谢你及时评论我的问题。非常感激


12
2018-02-20 22:55





简答:你不能。 Spawn(以其各种形式)仅采用0-arity函数。使用闭包并从产生函数引入绑定变量是要走的路,除了使用像ETS这样的某种共享数据存储(Monster Overkill)。

我从来没有发现使用闭包来严重妨碍我的代码结构;你能举出一些你遇到的问题的例子,也许有人可以为你整理一下吗?


1
2018-02-20 22:19



关于什么 spawn(Module, Function, Args)? Args 是一个 [term()]。 - 2rs2ts
@agarrett:问题说明“不使用MFA表格”。 - womble
对不起,直到你刚才指出这一点,我才意识到这意味着什么。谢谢:P - 2rs2ts


答案:


实际上,理查德指出我正确的方向来避免这个问题(在我对Erlang GoogleGroups提出的同一篇文章的回复中): http://groups.google.com/group/erlang-programming/browse_thread/thread/1d77a697ec67935a

他的回答是:

通过“使用闭包”,我希望你的意思是这样的:

Pid = spawn(fun() - > any_function(Any,Number,Of,Arguments)结束)

这将如何限制您的代码结构?

 /Richard 

谢谢你及时评论我的问题。非常感激


12
2018-02-20 22:55





简答:你不能。 Spawn(以其各种形式)仅采用0-arity函数。使用闭包并从产生函数引入绑定变量是要走的路,除了使用像ETS这样的某种共享数据存储(Monster Overkill)。

我从来没有发现使用闭包来严重妨碍我的代码结构;你能举出一些你遇到的问题的例子,也许有人可以为你整理一下吗?


1
2018-02-20 22:19



关于什么 spawn(Module, Function, Args)? Args 是一个 [term()]。 - 2rs2ts
@agarrett:问题说明“不使用MFA表格”。 - womble
对不起,直到你刚才指出这一点,我才意识到这意味着什么。谢谢:P - 2rs2ts