Я записал модуль Erlang, где не все внутренние функции непосредственно вызваны. Вместо этого существует пара функций, которые выглядят примерно так:
weird_func(Cmd, Args) ->
?MODULE:Cmd(Args).
Это - упрощенный пример, но Вы получаете идею. Компилятор Erlang выкладывает предупреждения о неиспользованных функциях, когда на самом деле они на самом деле используются, просто не непосредственно. Там некоторый путь состоит в том, чтобы подавить эти предупреждения? Идеально я не хочу подавлять все такие предупреждения, а скорее я хотел бы сказать компилятору Erlang рассматривать несколько определенных функций как особые случаи.
Если функция не экспортируется и не вызывается явно, она сообщается как неиспользуемая. Итак, у вас есть два пути:
1) Экспорт функций, которые используются косвенно. Если вы не хотите, чтобы эти функции вызывались извне модуля, вы можете выделить это в документации (и в комментариях).
2) Вызов каждой функции явно в weird_func:
weird_func(fun1, [A1,A2]) ->
fun1(A1, A2);
weird_func(fun2, []) ->
fun2();
weird_func(fun3, [A1,A2,A3]) ->
fun3(A1,A2,A3).
Последнее немного больше подробный, но это даст пользователям больше ошибок, если они вызовут несуществующую функцию
Дело не только в подавлении предупреждения. Неэкспортированная функция не может быть вызвана так, как вы намереваетесь.
-module(foo).
-export([f/0]).
f() -> ?MODULE:g().
g() -> ok.
1> c(foo).
./foo.erl:4: Warning: function g/0 is unused
{ok,foo}
2> foo:f().
** exception error: undefined function foo:g/0
Компилятор может полностью удалить неиспользуемую, неэкспортированную функцию. Просто экспортируйте функцию, сделав ее доступным вызов, используя синтаксис? MODULE: F.
У вас есть два варианта.
Первый - экспортировать функции, таким образом "используя" их. Это также необходимо для работы вашего исходного примера.
Второй - вызвать функции локально, используя что-то вроде:
weird_func(Cmd, Args) ->
case Cmd of
func1 -> func1(Arg1, Arg2, Arg3);
func2 -> func2(Arg1);
...
(Обратите внимание, что мой пример не компилируется. Вы должны разделить аргумент Args на части в зависимости от того, какую функцию вы вызываете)
.