Я использую аналогичный шаблон на вызывающей стороне, где модуль может предоставлять функцию классификации на уровне журнала (которая может возвращать недопустимые результаты). Я делаю это так:
-spec categorize(atom(), integer()) -> log_classification().
categorize(Module, Code) ->
case catch(Module:ns_log_cat(Code)) of
info -> info;
warn -> warn;
crit -> crit;
_ -> info % Anything unknown is info (this includes {'EXIT', Reason})
end.
Поскольку метода нет (в общем, вы, безусловно, могли бы создать поведение ОО и реализовать его с помощью сообщений, а затем получить method_missing
, вызываемый объект не знает, что я пытался что-либо предпринять, поэтому он не может его интерпретировать .