mochiweb のソース コードを調べていて、今まで使ったことのないものを見つけました。特にmochiweb http ライブラリにあるmochiweb_request
およびモジュールのモジュール宣言。mochiweb_response
モジュールの開始方法は次のとおりです。
-module(mochiweb_request,[ソケット、メソッド、RawPath、バージョン、ヘッダー])。 -著者(...)。
次に、モジュールに「get(socket) -> Socket;get(method)-> Method; ....
これは私を混乱させました」と表示されます。これらのモジュールの 1 つのモジュール情報を取得しようとしたとき、コンパイラは何かを追加していました:{abstract,true}
への戻り値
mochiweb_request:module_info().
。実際、彼らのドキュメントでは、これらのモジュールを として参照していますabstract modules
。
私はグーグルを検索し、パラメータ化されたモジュールに関する論文を見つけました。リンクは非常に大きいですが、ここをフォローすれば論文を入手できると確信しています
これらのモジュールは直接呼び出すことはできませんが、それら自体のインスタンスを介して呼び出されます。モジュールが楽しいものであるかのように動作します。これはランタイム システムの非公式な機能であることがわかりました。私を混乱させているのは、mochiweb の連中がそれをうまく使っているということです!. mochiweb モジュールでは、自分で書いたものを見つけることができます:
loop(必須、_DocRoot)-> "/" ++ パス = Req:get_path(), 本文 = Req:recv_body(), メソッド = Req:get(メソッド)、 ...、 ....、 Response = Req:ok({"text.html;charset=utf-8",[],chunked}), Response:write_chunk("ここに何かテキストがあります....."), ...
io:format("\n\t Req = ~p~n",[Req])
複雑なデータ構造 (タプル)を明らかにしようとすると、 element(1,Req) == mochiweb_request
. それは面白いです!?!!!?
質問 1: 今のところ本番環境で使用するのに安定していますか、それとも公式になるまで待つことができますか?
質問 2: mochiweb の連中は、まだ公式でない場合、どのようにしてそれを使用する自信を得たのですか?
質問 3: なぜまだ公式ではないのですか? (なぜなら、それはいくつかのオブジェクト指向の機能をもたらすからです)
質問 4: それを使ったことのある人はいますか? どのような場合に、これらのパラメータ化されたモジュールを使用しましたか? なんで?この機能の詳細を確認できるように、ソース コードへのリンクを表示または投稿する場所を教えてもらえますか?
最後の質問: Erlang ドキュメントのどこにも、この機能について言及されている場所はありませんでした。教科書も家もない. では、それを使用したことがある人は、どのようにして、それを使用する理由と方法をすでに見つけたのでしょうか? ここにあるErlangランタイムシステムの商用バージョンにはすでに含まれていますか?