Erlang函数调用匹配失败:为何符合模式却触发异常?
问题原因分析与解决办法
嘿,我一眼就揪出问题所在了——你的函数子句结尾符号用错啦!
在Erlang里,函数的多个子句之间用分号;分隔,但最后一个子句必须以句号.结尾。你写的函数定义是:
id_finder([{id, _, []}|_], _) -> ok;
这里结尾用了分号,编译器会默认认为这个函数还有后续子句没写完,导致整个函数没有被正确定义。当你调用它的时候,Erlang找不到有效的匹配子句,自然就抛出了no function clause matching的异常。
修正后的代码
只需要把结尾的分号改成句号就行:
id_finder([{id, _, []}|_], _) -> ok.
验证调用
现在再执行你的调用:
id_finder([{id, whatever, []}], whatever).
就会正常返回ok啦!
额外补充:你的模式[{id, _, []}|_]逻辑是没问题的,它完全可以匹配单元素列表[{id, whatever, []}]——因为|_允许列表剩余部分是空列表,这次的问题完全出在子句的结尾符号上。
内容的提问来源于stack exchange,提问作者pabloBar
相关产品推荐
相关产品推荐

