在Erlang中,in?运算符/前缀是什么意思?

uinbv5nw  于 2022-12-16  发布在  Erlang
关注(0)|答案(3)|浏览(217)

?MODULE中的问号(在Mochiweb make命令生成的所有代码中都可以看到)是什么意思?

-export([start/1, stop/0, loop/2]).

start(Options) ->
    {DocRoot, Options1} = get_option(docroot, Options),
       Loop = fun (Req) ->
               ?MODULE:loop(Req, DocRoot)
       end,
    mochiweb_http:start([{name, ?MODULE}, {loop, Loop} | Options1]).

stop() ->
    mochiweb_http:stop(?MODULE).

loop(Req, DocRoot) ->
    ...
vqlkdk9b

vqlkdk9b1#

它表示预处理器宏。?MODULE是扩展到当前模块名称的预定义宏常量之一。

vbkedwbf

vbkedwbf2#

这就是我们在Erlang中表示MACRO的方式。在编译时,这些宏被替换为实际的含义。它们保存了重写代码的时间,或者节省了提取出一个参数的时间,你将来可以在不改变代码的情况下改变这个参数(只需要重新编译依赖于MACRO的源代码)。
例如:

-module(square_plus).
-compile(export_all).
-define(SQUARE(X),X * X).

add_to_square(This,Number)-> ?SQUARE(This) + Number.

字符串
等同于:

-module(square_plus).
-compile(export_all).

add_to_square(This,Number)-> (This * This) + Number.
pokxtpni

pokxtpni3#

-define(Macro,Replacement).由预处理器使用,以支持宏,使程序具有更多可读性。它可用于条件编译。建议如果一个宏用于多个模块,则将其定义放在包含文件中。
宏定义示例:

-define(TIMEOUT, 200).

使用宏:

?TIMEOUT.

预定义宏列表:

?MODULE: The name of the current module.
?FILE: The file name of the current module.
?LINE: The current line number.
?MACHINE: The machine name.

来源:https://www.dcs.gla.ac.uk/~amirg/tutorial/erlang/

相关问题