在 messager 系統(tǒng)添加的另外一種東西是宏。在 mess_config.hrl 文件中包含如下的定義:
%%% Configure the location of the server node,
-define(server_node, messenger@super).
這個頭文件被包括到了 mess_server.erl 文件中:
-include("mess_config.hrl").
這樣,在 mess_server.erl 中出現(xiàn)的每個 server_node 都被替換為 messenger@super。
宏還被用于生成服務端進程:
spawn(?MODULE, server, [])
這是一個標準宏(也就是說,這是一個系統(tǒng)定義的宏而不是用戶自定義的宏)。?MODULE 宏總是被替換為當前模塊名(也就是在文件開始的部分的 -module 定義的名稱)。宏有許多的高級用法,作為參數(shù)只是其中之一。
Messager 系統(tǒng)中的三個 Erlang(.erl)文件被分布編譯成三個獨立的目標代碼文件(.beam)中。當執(zhí)行過程中引用到這些代碼時,Erlang 系統(tǒng)會將它們加載并鏈接到系統(tǒng)中。在本例中,我們把它們全部放到當前工作目錄下(即你執(zhí)行 "cd" 命令后所在的目錄)。我們也可以將這些文件放到其它目錄下。
在這個 messager 例子中,我們沒有對發(fā)送消息的內容做出任何假設和限制。這些消息可以是任何合法的 Erlang 項。