2017-02-12 20 views
1

在下面的例子中,我想在apply(M, F, A)調用中爲參數指定一個類型,但是我不知道如何。在這裏,dialyzercallback_function規範抱怨的{event, "something append !"}{anyevent, string()}類型定義之間的類型不匹配:您可以使用apply(M,F,A)爲erlang中的函數參數指定一個類型嗎?

-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). 

或者你有其他的設計命題,我可以用做一個回調函數類型檢查?

謝謝!

回答

1

原樣使用apply/3,我相信你運氣不好。 但是,你可以改變行:

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

到:

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

這將使透析意識到指定的參數類型。

+0

謝謝!與'CbMod:CbFun({event,「something append!」})完美合作,' – JSM

相關問題