【问题标题】:How can I solve “an Erlang Exception Error”如何解决“Erlang 异常错误”
【发布时间】:2020-06-23 23:02:12
【问题描述】:

我在调试 Erlang 聊天引擎时不断收到异常错误。

错误信息如下:

异常错误:没有函数子句匹配 code_lock:locked(cast, {button,1}, #{button => [], code => [a,b,c,d], length => 4})

知道如何调试吗?

【问题讨论】:

    标签: erlang erlang-otp


    【解决方案1】:

    定义了函数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} 也不匹配列表,也不匹配两个元素的元组。

    解决问题有两种方法:要么固定函数的定义,要么固定参数以匹配现有定义。

    【讨论】:

    • 好吧,我做了一个调整并运行了一个命令 code_lock:start_link([1,2,3], 4)。而且我得到了另一个**异常错误:未定义的函数code_lock:start_link/2。
    • 注释不是粘贴代码的最佳位置。最好用代码更新问题。
    • 好的。我会更新这个问题。好吧,我做了一个调整并运行了一个命令 code_lock:start_link([1,2,3], 4)。而且我得到了另一个**异常错误:未定义的函数code_lock:start_link/2。
    【解决方案2】:

    好的,这与匹配现有定义的参数有关。整理了一下,调试过程就ok了。

    【讨论】:

    • 感谢@choroba 的提示。
    猜你喜欢
    • 2013-06-07
    • 2012-01-12
    • 2022-01-03
    • 2021-08-04
    • 1970-01-01
    • 2013-02-12
    • 2011-02-15
    • 2013-10-13
    • 1970-01-01
    相关资源
    最近更新 更多