0

嗨,我一直在为 erlang 使用 rfc4627,现在我之前有这段代码可以工作,但现在在我对传递的方式进行了更改之后,我在节点“@127.0.0.1”上遇到了进程错误* ,退出值:{ {badmatch,{obj,[{c,1}]}}

这是代码

-define(TO_SELF, fun(S, M, T) -> Msg = {obj, M}, ?LOG("OUTGOING: ~p~n", [Msg]), ok end).

其中 M 是 Msg=[{c,1}],

有没有人知道是什么原因导致我整天都在尝试但没有运气。谢谢戴夫

4

1 回答 1

3

这可能是导致您的问题的 Erlang 中 funs 的变量范围规则。在 fun 定义之前绑定的 fun 主体中的任何自由变量都将其值导入到 fun 中。fun 是一个闭包,所以这对于大多数带有闭包的语言来说都很常见,它实际上是使 funs/closures 如此强大的原因之一。

所以如果Msg在你定义乐趣的时候已经绑定了,

Msg = foo,
F = ?TO_SELF,
...

在示例中,它的值然后被导入并且Msg = {obj,M}不绑定Msg而是针对它的值进行测试foo

于 2013-01-28T20:13:23.930 回答