crash - Erlang:不寻常的case_clause崩溃
问题描述
在测试我的 Erlang 程序时,我遇到了一个非常不寻常的 case_clause 匹配失败。
createPattern(PatternId, Analyzer, PatternDesc) when is_list(PatternDesc) ->
F = fun() ->
case mnesia:wread({patterns, PatternId}) of
[] ->
mnesia:write(#patterns{pattern_id = PatternId, analyzer = Analyzer, pattern_desc = PatternDesc}),
{?RESULT_PASSED, ?REASON_CREATED};
_ -> {?RESULT_FAILED, ?REASON_EXISTS}
end
end,
case Analyzer of
{script, ScriptName} ->
case io_lib:latin1_char_list(ScriptName) of
true -> ok
end;
{erlang, {M, F}} ->
case utils:loadModule(M, F, 2) of
{?RESULT_PASSED, _} -> ok
end;
{expression, Expression} ->
utils:screenExpression(Expression);
{expression_group, ExpressionGroup} ->
utils:screenExpressionGroup(ExpressionGroup)
end,
mnesia:activity(transaction, F).
我通过值为 {erlang, {plugin, evaluate}} 的分析器。我遇到了 case_clause 崩溃。当我用 {erlang, {Module, Function}} 替换 {erlang, {M, F}} 时,匹配成功。
现在这是不寻常的,因为模式是相同的,并且 M 和 F 没有事先声明。所以应该匹配。
我正在运行 erlang 23。我在这里缺少什么?
谢谢。
解决方案
好吧,您实际上之前确实将 F 定义为函数(见下文)。也许你想从那个开始。
F = fun() ->
推荐阅读
- gradle - gradle 自定义目标构建失败
- javascript - html5 音频播放器:从/到曲目播放
- java - 如何针对新项目问题调整 Intellij 配置?
- python - 如何正确覆盖 TestCase.assertEqual(),产生正确的堆栈跟踪?
- language-agnostic - 将 CSV 文件读入二维数组的合理最高速度是多少?
- php - 无法发布contactform.php
- node.js - Heroku 构建失败 - 推送被拒绝,无法编译 node.js 应用程序,无法缩小包,许多错误
- mysql - 创建索引后查询很快,但几分钟后查询很慢 MySQL
- javascript - MERN堆栈推送到heroku:![remote denied] master -> master (pre-receive hook denied)
- typescript - 按属性类型提取值