主要是想知道能不能发function在分布式 Erlang 设置中的消息中。
在机器 1 上:
F1 = Fun()-> hey end,
gen_server:call(on_other_machine,F1)
在机器 2 上:
handler_call(Function,From,State) ->
{reply,Function(),State)
是否有意义?
Here是一篇关于“将 fun 传递给其他 Erlang 节点”的有趣文章。简单地恢复一下:
[...] 如您所知,Erlang 发行版
通过发送二进制编码来工作
条款;所以发送一个有趣的也是
本质上是通过使用编码来完成的
erlang:term_to_binary/1;通过
将生成的二进制文件发送到另一个节点,以及
然后使用再次解码
erlang:binary_to_term/1.[...]
这是很明显的
对于大多数数据类型;但怎么办
适用于函数对象?
当你编码一个乐趣时,编码的是什么
只是对函数的引用,
不是函数的实现。
[...]
[...]函数的定义没有被传递;如果该模块存在,那么信息就足以在其他节点上重新创造乐趣。
[...] 如果包含 fun 的模块尚未加载,并且目标节点正在交互模式下运行;然后尝试使用常规模块加载机制(包含在模块 error_handler 中)加载模块;然后它尝试查看给定 id 的 fun 在所述模块中是否可用。但是,这只在您尝试应用该函数时才会延迟发生。
[...] 如果您从不尝试应用该功能,那么就不会发生任何不好的事情。乐趣可以传递到另一个节点(其中有有问题的模块/乐趣),然后每个人都很高兴。
也许目标节点加载了一个具有所述名称的模块,但可能是不同的版本;那么很可能有不同的 MD5 校验和,那么如果您尝试应用它,您会收到错误 badfun。
我建议您阅读整篇文章,因为它非常有趣。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)