1

関数を返す関数があります。私はEUnitテストでそれをチェックします:

string_to_options_test() ->
    Parser = get_parser("-", ?OPTS_FOO_BAR),
    {ok, [opt_foo, opt_bar]} = Parser("foo-bar").

それは大丈夫です。最後の行を変更すると、エラーが発生します。

string_to_options_test() ->                        % 41
    Parser = get_parser("-", ?OPTS_FOO_BAR),
    Parser("foo-bar") = {ok, [opt_foo, opt_bar]}.  % 43, swapped LHS and RHS,

テストの実行:

urlparser.erl:43: illegal pattern
urlparser.erl:41: Warning: variable 'Parser' is unused

Parser割り当ての左側で関数を使用できないのはなぜですか?

4

1 に答える 1

1

これは楽しいです。すべてのパターン マッチの LHS 式はパターンでなければなりませんが、右側は任意のにすることができます。主な違いは、パターンにバインドされていない変数がある場合がありますが、完全に削減する必要があることです。あなたの LHS は、コンパイル時に計算できない式であり (一部の算術式では計算可能)、結果として有効なパターンではありません。

于 2013-09-04T18:27:56.300 に答える