私はOTPを見始めると、gen_server、FSM、eventという基本的に3つの動作がありますが、inetsアプリケーションの例があります。カスタマイズされた動作が定義されていることがわかりました(動作はinets_serviceです)。では、ユーザーはどのようにカスタマイズされた動作を定義できますか?それは何のためにできますか?Erlangでカスタマイズされた動作を定義する方法とそのために何ができますか?
1
A
答えて
2
4
カスタムビヘイビアでは、契約を指定できます。この契約は、その動作を実装するモジュール内に存在しなければならない関数名/属性のリストによって与えられます。基本的には、すべての関数を宣言していることを確認するだけの利便性です。
例として、gen_server
の動作を持つモジュールを定義してから、handle_info/2
関数を省略することができます。あなたが契約の一部を欠いているので、行動チェックはエラーになります。
これがすべてです!それらを実装するために、振る舞いを定義する振る舞い定義モジュールbehavior_info/1
に特別な関数を定義しています。この関数はErlangシステムに振る舞いを伝えます。
inets
は、inets
システムへのpluginの契約として機能するため、inets_service
の動作を定義しています。カスタムbehavious -callback使用
+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().
アーラン。
関連する問題
- 1. Erlang:複数の動作が同じモジュールで定義されていますか?
- 2. Erlang/Elixirで関数を動的に定義する方法
- 3. 親ウィンドウをカスタマイズされたコントロールから通知するための好ましい方法は何ですか?
- 4. ElasticSearchでカスタマイズされたアナライザの定義を取得する方法
- 5. angularjsにカスタマイズされた多値フィルターを定義する方法は?だから、
- 6. ブロックチェインとは何ですか?私はそれを何のために使うことができますか?
- 7. サービスから返されたオブジェクトにアクセスできますが、そのプロパティにアクセスすると未定義です
- 8. stm32f4xxプラットフォームで定義されたポートを設定するための関数を作成する方法は?
- 9. CitrusFrameworkでカスタマイズされたレポートを作成できますか
- 10. カスタマイズされたメッセージダイアログを表示するための最良の方法は何ですか?
- 11. tornadofxでカスタマイズされたUIコンポーネントを作成するためのベストプラクティスは何ですか?
- 12. Erlangで一定のものを定義する方法
- 13. Androidでカスタマイズされたプログレスバーを設定する方法
- 14. Cでカスタマイズされたプログレスバーを作成する方法
- 15. XamarinFormsで 'カスタマイズされた'ビューを作成する方法は?
- 16. カスタマイズされたユーザー定義集約個別関数の作成方法
- 17. ボタンが押されたときにタスクを実行するために、ActionEventの動作とそのオブジェクトの作成方法を教えてください。
- 18. カスタマイズされたUIでキオスクモードで動作するInternet Explorerを埋め込む
- 19. iOS AVFoundationのカスタマイズされた検出器を定義する方法は?
- 20. メソッド(セプファイル)を__init__.pyで定義されたクラスにインポートするためのきれいな方法
- 21. カスタマイズされたリビジョンリストでユーザーIDをカスタマイズする方法
- 22. データベースにあらかじめ定義された値を設定する方法
- 23. バンドルで定義されている著作権を取得するためのinfoDictionaryキーは何ですか?
- 24. MXNetRでカスタマイズした操作を定義します
- 25. ボタンの値が渡されたときに未定義です
- 26. なぜ10000000000000.126.toString()が1000000000000.127(そしてそれを防ぐために何ができますか)ですか?
- 27. カスタマイズされた値を作る方法はIEの出力タグで動作しますか?
- 28. 定義されたインタフェースのIPアドレスでerlang/elixirを開始する
- 29. eclipse.userlibrariesで定義されたライブラリをIntellijにインポートする方法
- 30. Erlangで循環リストを定義できますか?
"このページにアクセスした場合:Erlang R14 otpのリリース後にカスタム動作を定義する方法が変更されたため、以下の回答が変更される可能性があります。 https://erlangcentral.org/wiki/index.php?title=Defining_Your_Own_Behaviourはいくつかの情報を提供する可能性があります –
これに関する最新のディスカッション(例を含む)は次のとおりです:http://stackoverflow.com/questions/32336854/how-to -use-a-callback-function-in-erlang-behavior/32337438#32337438 – zxq9