1

はこの声明に出くわしました

「xxxx のプログラマーは継承を使いすぎる傾向があることに気付きました。おそらく、それがその言語でコードを拡張する唯一の合理的な方法だからです。コードを拡張するためのはるかに優れた、より一般的な方法は、通常、フックを使用することです (Apache のモジュール API、[ cf. Drupal を追加するかもしれません]))"

しばらく探しましたが、「フック」という用語が OCaml ドキュメントの他の場所で繰り返されているのを見たことがありません。

OCaml でこれに対する言語サポートはありますか? 正しい方向に向けてください。ある種の現存する (すべてのインスタンス) 管理されたクラスとコールバックが必要ですが、モジュールは何らかの方法でフックを実装できますか?

ありがとう!

4

2 に答える 2

0

Apache ドキュメントのフックの説明は次のとおりです。

一般に、フック関数は、Apache が要求の処理中のある時点で呼び出す関数です。モジュールは、呼び出される関数を提供し、他のモジュールと比較していつ呼び出されるかを指定できます。

より一般的な用語は、コールバック関数です。C# などの言語には、デリゲートと呼ばれる特別な Cal​​lback-Objectがあります。これは、関数をその言語の (良い) 第一級市民として扱わないためです。OCamlのような関数型言語では、関数は他の値と変わらないため、ポインターなどを必要とせずに整数値と同じように渡すことができます。これにより、これらの言語でコールバック関数を非常に自然に記述できるため、プログラマーはそのための派手な名前さえ必要としません。;)

実際、OCaml の標準ライブラリには、他の関数を引数として取る多くの高階関数があります。次に例を示します。

List.iter print_endline ["higher"; "order"; "function"]

このList.iter関数は、print_endline関数を「コールバック」引数として取り、それを 2 番目の引数 (文字列リスト) のすべての要素に適用します。OCaml では関数に副作用を持たせることができるので、関数を指定してList.iter、プログラムの他の場所で参照を変更することもできます。

于 2013-04-09T09:22:00.167 に答える