В приведенном ниже примере я хотел бы указать тип аргумента в вызове apply(M, F, A)
, но я не могу понять, как это сделать. Здесь, dialyzer
не жалуется на тип несоответствия между {event, "something append !"}
и {anyevent, string()}
определения типа в callback_function
спецификации:Можете ли вы указать тип аргумента функции в erlang, используя apply (M, F, A)?
-module(erl_test).
-export([
callback_function/1,
test_it/0
]).
-spec callback_function(
Event::{anyevent, string()}) -> ok.
callback_function(Event) ->
io:format("event received: ~p~n", [Event]),
ok.
-spec notify_something(CbMod::module(), CbFun::atom()) -> ok.
notify_something(CbMod, CbFun) ->
apply(CbMod, CbFun, [{event, "something append !"}]),
ok.
test_it() ->
notify_something(?MODULE, callback_function).
Или у вас есть какие-либо другие конструкции предложения, которые я мог бы использовать, чтобы сделать проверку типа на функцию обратного вызова?
Спасибо!
спасибо! отлично работает с 'CbMod: CbFun ({event," something append! "}),' – JSM