erlang 如何调试异常错误:没有匹配的函数子句?

d6kp6zgx  于 2022-12-16  发布在  Erlang
关注(0)|答案(2)|浏览(154)

我在调试Erlang聊天引擎时不断收到异常错误。
错误消息显示:

exception error: no function clause matching code_lock:locked(cast,
{button,1}, #{button => [], code => [a,b,c,d], length => 4})

知道怎么调试吗?

ccgok5k5

ccgok5k51#

函数locked被定义了(异常还应该告诉你它的定义从哪个while和哪一行开始),但是没有一个子句与异常中显示的参数匹配。
例如,如果我们定义

nfcm([H|T],X) ->
    [H,X|T];
nfcm({A,B},C) ->
    {A,C,B}.

我们可以调用nfcm([1,2,3], 4)nfcm({1,2}, 3)来得到[1,4,2,3]{1,3,2},但是调用nfcm(1, 2)nfcm({1,2,3}, 4)会导致异常,因为1既不匹配列表也不匹配元组,{1,2,3}既不匹配列表,也不匹配包含两个元素的元组。
有两种方法可以解决这个问题:修复函数的定义,或修复参数以匹配现有定义。

tag5nh1u

tag5nh1u2#

好的,这与参数匹配现有定义有关。排序后,调试过程就可以了。

相关问题