1

I have a function that returns a function. I check it with EUnit test:

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

It is all right. When I modify the last line, I get an error:

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

Running the test:

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

Why I can't use Parser function at the left hand side of the assignment?

4

1 回答 1

1

这个很有趣。每个模式匹配的 LHS 表达式必须是一个模式,而右边可能是一个任意。主要区别在于模式可能具有未绑定的变量,但必须完全减少。您的 LHS 是一个无法在编译时计算的表达式——就像某些算术表达式一样——因此它不是一个有效的模式。

于 2013-09-04T18:27:56.300 回答