可以使用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 !"}]),