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にインポートされます。楽しみはクロージャであるため、これはクロージャを持つほとんどの言語に共通です。実際、これは楽しみ/クロージャを非常に強力にするものの1つです。

したがってMsg、楽しみを定義するときにすでにバインドされている場合は、

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

次に、その値がインポートされ、Msg = {obj,M}バインドされませんMsgが、例ではその値に対してテストさfooれます。

于 2013-01-28T20:13:23.930 に答える