Я просматривал исходный код mochiweb и увидел то, что никогда раньше не использовал. Объявление модуля, особенно в модулях mochiweb_request
и mochiweb_response
, найденных в библиотеке http mochiweb. Вот как начинается модуль:
-module(mochiweb_request,[Socket, Method, RawPath, Version, Headers]).
-author(...).
Тогда в модуле вы видите get(socket) -> Socket;get(method)-> Method; ....
Это смутило меня. Когда я попытался получить информацию о модуле одного из таких модулей, компилятор добавил что-то: {abstract,true}
в ответ на:
mochiweb_request:module_info().
. Infact, их документация ссылается на эти модули как abstract modules
.
Я искал в 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])
выявляет сложную структуру данных (кортеж), чья element(1,Req) == mochiweb_request
. Это интересно!? !!!?
Вопрос 1: На данный момент это стабильно для использования в производстве, или я могу подождать, пока оно не станет официальным?
Вопрос 2: Как ребята из mochiweb обрели уверенность в использовании этого, если оно еще не официально?
Вопрос 3: Почему это еще не официально? (потому что для меня это приносит некоторые объектно-ориентированные функции)
Вопрос 4: есть ли кто-нибудь, кто использовал это также? В каких случаях он / она использовал эти параметризованные модули? Зачем? Можете ли вы указать нам, чтобы увидеть или опубликовать ссылку на некоторый исходный код, чтобы мы могли узнать больше об этой функции?
Последний вопрос: нигде в документах Erlang я не нашел эту функцию, о которой говорили. Нет учебника, нет даже дома . Так как же те, кто его использовал, уже узнали, как и зачем его использовать? Она уже включена в коммерческую версию системы времени исполнения Erlang, найдена здесь ?