Erlang 左侧功能,非法模式
我有一个返回函数的函数。我使用EUnit测试进行检查: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
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测试失败。但我不明白你为什么想交换边。如果您的第一个代码片段是正确的,那么有什么问题?那么,这仅仅是关于联会、好奇心,还是你真的需要尤尼特以一种特殊的方式行事?