可以使用apply(M,F,a)在erlang中指定函数参数的类型吗?

可以使用apply(M,F,a)在erlang中指定函数参数的类型吗?,erlang,Erlang,在下面的示例中,我想在apply(M,F,a)调用中为参数指定一个类型,但我不知道如何指定。在这里,透析器没有抱怨{event,“something append!”}和{anyevent,string()}回调函数中的类型定义规范: -module(erl_test). -export([ callback_function/1, test_it/0 ]). -spec callback_function( Event::{anyev

在下面的示例中,我想在
apply(M,F,a)
调用中为参数指定一个类型,但我不知道如何指定。在这里,
透析器
没有抱怨
{event,“something append!”}
{anyevent,string()}
回调函数中的类型定义规范:

-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).
或者你有没有其他的设计主张,我可以用来对回调函数进行类型检查


谢谢大家!

使用
apply/3
就目前而言,我相信你运气不好。 但是,您可以更改行:

apply(CbMod, CbFun, [{event, "something append !"}]),
致:


这将使透析器知道指定的参数类型。

谢谢!与
CbMod:CbFun({event,“something append!”})完美配合使用,
CbMod:CbFun([{event, "something append !"}]),