Я просматривал исходный код mochiweb и увидел то, что никогда раньше не использовал. Объявление модуля, особенно в модулях mochiweb_request
и mochiweb_response
, найденных в библиотеке mochiweb http. Вот как начинается модуль:
-module(mochiweb_request,[Socket, Method, RawPath, Version, Headers]). -author(...).
Затем в модуле вы видите get (socket) -> Socket; get (method) -> Method; ....
Это меня сбило с толку. Когда я попытался получить информацию о модуле одного из таких модулей, компилятор добавил что-то: {abstract, true}
в ответ на: mochiweb_request: module_info ().
. Фактически, в их документации эти модули называются абстрактными модулями
.
Я искал в Google и нашел статью о параметризованных модулях: ссылка такая большая, но я уверен, что вы получите статью, если подпишетесь на здесь
. Эти модули нельзя вызывать напрямую, они вызываются через экземпляры самих себя. Это заставляет модули вести себя так, как если бы они были забавными. Я понял, что это неофициальная функция в системе времени выполнения. Что меня смущает, так это то, что ребята из mochiweb используют его хорошо! В модуле mochiweb вы сами напишете:
loop(Req,_DocRoot)-> "/" ++ Path = Req:get_path(), Body = Req:recv_body(), Method = Req:get(method), ..., ...., Response = Req:ok({"text.html;charset=utf-8",[],chunked}), Response:write_chunk("Some text here....."), ...
Попытка io: format ("\ n \ t Req = ~ p ~ n", [Req])
обнаруживает сложную структуру данных ( кортеж), у которого элемент (1, Req) == mochiweb_request
. Это интересно!? !!!?
Вопрос 1: стабилен ли он для использования в производстве на данный момент, или я могу подождать, пока он станет официальным?
Вопрос 2: Как ребята из mochiweb получили доверие использовать это, если еще не официально?
Вопрос 3: Почему еще не официально? (потому что, на мой взгляд, он привносит в него некоторые объектно-ориентированные функции)
Вопрос 4: Есть ли кто-нибудь, кто его тоже использовал? В каких случаях он / она использовал эти параметризованные модули? Почему? Можете ли вы указать нам там, чтобы увидеть или опубликовать ссылку на какой-либо исходный код, чтобы мы могли узнать больше об этой функции?
Последний вопрос: Нет, где в документации Erlang я нашел, что эта функция обсуждается. Ни учебников, ни даже дома . Так как же те, кто им пользовался, уже узнали, как и зачем им пользоваться? Включен ли он в коммерческую версию системы времени выполнения Erlang, найденную здесь ?