【发布时间】:2011-07-17 09:02:49
【问题描述】:
我正在浏览 mochiweb 源代码,并看到了一些我以前从未使用过的东西。模块声明,尤其是在 mochiweb http 库中的 mochiweb_request 和 mochiweb_response 模块中。以下是模块的开始方式:
然后在模块中你会看到get(socket) -> Socket;get(method)-> Method; ....
这让我很困惑。当我尝试获取其中一个此类模块的模块信息时,编译器添加了一些内容:{abstract,true} 以返回:mochiweb_request:module_info().。事实上,他们的文档将这些模块称为abstract modules。
我搜索了谷歌并找到了一篇关于参数化模块的论文:链接很大,但如果你关注here,我相信你会得到这篇论文
这些模块不能直接调用,而是通过它们自身的实例调用。它使模块表现得好像它们很有趣。我开始意识到它是运行时系统中的一个非官方特性。让我感到困惑的是,mochiweb 的人用得很好!在 mochiweb 模块中,您会发现自己在写作:
循环(请求,_DocRoot)-> "/" ++ 路径 = Req:get_path(), 正文 = 请求:recv_body(), 方法 = 请求:获取(方法), ..., ....., 响应 = 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 Docs 的任何地方都没有发现这个特性。没有教科书,甚至没有home。那么那些使用过它的人是如何知道如何以及为什么要使用它的呢?是否已经包含在 here 找到的 Erlang Run time 系统的商业版本中?
【问题讨论】:
-
请避免使用“Hello”、“Hi”、“Thanks”和签名。谢谢。见meta.stackexchange.com/questions/2950/…
-
What alternatives are there to parameterised modules in Erlang? 的可能重复项。另外,为什么要对Parameterized modules in Erlang 使用标签“mnesia”? Mnesia 使用它们吗?
标签: module erlang parameterized