为什么gen_server示例总是定义SERVER宏?

时间:2016-07-21 05:54:18

标签: erlang

为什么[[RCTBundleURLProvider sharedSettings] setDefaults]; jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil]; 的一些示例(以及文本编辑器中的模板)具有:

gen_server

有什么好的理由吗?

Inaka's guildelines提出了这个问题,他们说明了相反的观点:

  

不要将宏用于模块或函数名称

以下是他们提供的code example

-define(SERVER, ?MODULE).

2 个答案:

答案 0 :(得分:2)

  

为什么gen_server的每个示例(以及文本编辑器中的模板)总是有

搜索" erlang gen_server示例",在我的第一页上没有点击定义这个宏(事实上我以前没见过它)。特别是,这包括Erlang文档自己的http://erlang.org/doc/design_principles/gen_server_concepts.html,"了解一些Erlang"以及Erlang wikibook。

  

有什么好的理由吗?

原因显然是使用更多的描述性"名称;这是否是一个好的原因是一个品味问题。

答案 1 :(得分:0)

我认为使用-define定义和记录模块的相关变量是一种很好的做法。对于在模块中的不同位置使用并且您希望使其可配置的变量尤其如此。

实际上,我认为你的问题在错误的一面解决了这个问题:gen_server名称是一个模块范围的可配置变量(因此最好定义它),为了简单起见,它变成了通常的做法是选择等于模块名称的服务器名称:gen_server的名称通常已注册,因此您可以向其发送消息。由于这里的名称是一个关键变量(甚至可能存在您想要更改的情况),因此通常会-defined编辑。

我还认为您引用的指南是针对宏的不同用例。