您可以分两步完成(将模式匹配保持在函数头级别):
funcName(T = {description,A,B}, Map) ->
funcName(T, maps:get(Map,A,undefined), maps:get(Map,B,undefined), Map).
funcName({description,a,b}, A, 2, Map) when A =/= undefined ->
...
编辑
我刚刚重新阅读了您的问题,现在不明白什么不起作用。它可以一步完成,用你的代码(和一个小的语法更正):
-module (test).
-export ([funcName/2]).
funcName({description,a,b}, #{a := A, b := 2}) ->
A;
funcName(_,_) ->
error.
你可以测试一下:
1> test:funcName({description,a,b},#{a => "hello", b => 2}).
"hello"
2> test:funcName({description,a,b},#{a => "hello", b => 3}).
error
3> test:funcName({description,a,b},#{a => "hello", c => 2}).
error
4> test:funcName({description,a,b},#{aa => "hello", b => 2}).
error
5> test:funcName({description,a,bb},#{a => "hello", b => 2}).
error
6> test:funcName({description,a,b,c},#{a => "hello", b => 2}).
error
7>