【发布时间】:2020-06-23 23:02:12
【问题描述】:
我在调试 Erlang 聊天引擎时不断收到异常错误。
错误信息如下:
异常错误:没有函数子句匹配 code_lock:locked(cast, {button,1}, #{button => [], code => [a,b,c,d], length => 4})
知道如何调试吗?
【问题讨论】:
标签: erlang erlang-otp
我在调试 Erlang 聊天引擎时不断收到异常错误。
错误信息如下:
异常错误:没有函数子句匹配 code_lock:locked(cast, {button,1}, #{button => [], code => [a,b,c,d], length => 4})
知道如何调试吗?
【问题讨论】:
标签: erlang erlang-otp
定义了函数locked(异常还应该告诉您它的定义是从哪段时间和哪一行开始的),但没有一个子句与异常中显示的参数匹配。
例如,如果我们定义
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} 也不匹配列表,也不匹配两个元素的元组。
解决问题有两种方法:要么固定函数的定义,要么固定参数以匹配现有定义。
【讨论】:
好的,这与匹配现有定义的参数有关。整理了一下,调试过程就ok了。
【讨论】: