在测试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}}的Analyzer。我的手机死机了。当我用{erlang,{Module,Function}}替换{erlang,{M,F}}时,匹配成功了。
现在这是不寻常的,因为模式是相同的,并且M和F之前没有声明。所以它应该匹配。
我在跑二郎23。我在这里错过了什么?
谢谢。
实际上,您以前确实将F定义为函数(见下文(。也许你想从那开始。
F = fun() ->