Erlang 左侧功能,非法模式

Erlang 左侧功能,非法模式,erlang,Erlang,我有一个返回函数的函数。我使用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 = ge

我有一个返回函数的函数。我使用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

为什么我不能使用作业左侧的
解析器
函数?

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

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

您无法绑定函数调用。
=
不一定是绑定
{foo}={foo}。
可以,而
{foo}={bar}。
合法但不匹配。当然,但是当您在LHS上有变量时,它是绑定或匹配的。你想对你的LHS函数调用做什么?@niahoo:如果LHS与RHS不匹配,我希望这个EUnit测试失败。但我不明白你为什么想交换边。如果您的第一个代码片段是正确的,那么有什么问题?那么,这仅仅是syntaxt、好奇还是真的需要Eunit以一种特定的方式进行行为呢?您只是不能绑定函数调用。
=
不一定是绑定
{foo}={foo}。
可以,而
{foo}={bar}。
合法但不匹配。当然,但是当您在LHS上有变量时,它是绑定或匹配的。你想对你的LHS函数调用做什么?@niahoo:如果LHS与RHS不匹配,我希望这个EUnit测试失败。但我不明白你为什么想交换边。如果您的第一个代码片段是正确的,那么有什么问题?那么,这仅仅是关于联会、好奇心,还是你真的需要尤尼特以一种特殊的方式行事?