當我開始看OTP的時候,基本上有三種行爲,gen_server,FSM,event, 但是有一個inets應用的例子,我看到它定義了一個自定義行爲 -behavior(inets_service)。那麼用戶如何定義一個定製的行爲,它可以爲你做什麼?如何在Erlang中定義自定義行爲以及它可以爲您做些什麼?
1
A
回答
2
4
定製行爲允許您指定合同。這個合同是由實現該行爲的模塊中必須存在的函數名稱/元素列表給出的。確保您聲明所有功能基本上是方便的。
舉例來說,您可以定義一個具有gen_server
行爲的模塊,然後從中省略handle_info/2
函數。行爲檢查會因爲缺少合同的一部分而出錯。
這就是它的全部!爲了實現它們,在行爲定義模塊behavior_info/1
中定義了一個特殊功能,告訴Erlang系統有關行爲的信息。
inets
定義了一個inets_service
行爲,因爲它然後作爲inets
系統的插頭合同。
+0
如果定義一個gen_server行爲並忽略它的handle_info/2。行爲檢查將**警告**不是**錯誤**。 – mingchaoyan
0
牛仔演示
-module(cowboy_middleware).
-type env() :: [{atom(), any()}].
-export_type([env/0]).
-callback execute(Req, Env)
-> {ok, Req, Env}
| {suspend, module(), atom(), [any()]}
| {halt, Req}
| {error, cowboy:http_status(), Req}
when Req::cowboy_req:req(), Env::env().
二郎使用-callback定製的品行。
相關問題
- 1. 爲什麼默認定義_GNU_SOURCE以及如何關閉它?
- 2. 如何以及爲什麼被AP定義爲liftM2 ID在Haskell
- 3. Tomcat它是什麼以及如何設置自定義網頁
- 4. 是否可以自定義RichTextBox.DetectUrls行爲
- 5. Magento的自定義模塊(它們是什麼以及誰可以寫他們)
- 6. 爲什麼它可以使用未定義的結構在C
- 7. 上下文參數在Android中做什麼以及它應該定義爲什麼?
- 8. 什麼是C#中的自定義值類型,以及如何創建它們?
- 9. 是否可以(如何)爲dojox.gfx行定義自定義筆劃樣式?
- 10. 什麼是用戶定義函數以及如何執行?
- 11. 在NS2中可以做什麼以及不能做什麼?
- 12. 您可以爲Globalize3實現自定義回退嗎?
- 13. 您可以爲Android TextView添加自定義狀態嗎?
- 14. 您可以爲STB創建自定義驅動程序嗎?
- 15. 爲什麼sync.me應用可以自定義來電屏幕?
- 16. 爲什麼不在恆定的空間中運行(以及如何實現它)?
- 17. 爲什麼erlang重新定義了一些基本的餘數?
- 18. activeandroid中的mId是什麼以及它何時可以爲null?
- 19. 我們可以做些什麼以便我們的自定義UIView的用戶可以在XIB中自定義UIView?
- 20. 爲什麼自定義過濾器沒有以角度運行?
- 21. 爲什麼可以在routes.rb中定義兩個根路徑?
- 22. 什麼是套接字的定義,爲什麼需要它以及它是如何工作的?
- 23. 何時以及爲什麼要使用自定義事件處理程序
- 24. 如何自定義Flyway以便它可以處理CSV文件作爲輸入?
- 25. 我們可以爲門戶定義自定義權限嗎?
- 26. Excel:可以爲CONVERT功能定義自定義單位嗎?
- 27. 瞭解自定義JQuery事件以及如何修改它slrthly
- 28. Icefaces的默認外觀以及如何自定義它
- 29. 爲什麼我在JavaScript中定義函數之前可以使用它?
- 30. 爲什麼可以定義一個名爲var或dynamic的類?
「對於瀏覽此頁面的人:」下面的答案可能會改變,因爲定義自定義行爲的方法在Erlang R14 otp發佈後發生了變化。 https://erlangcentral.org/wiki/index.php?title=Defining_Your_Own_Behaviour可能會提供一些信息 –
關於此問題的更新討論(附帶示例)在這裏:http://stackoverflow.com/questions/32336854/how-to -use-a-call-function-in-erlang-behavior/32337438#32337438 – zxq9