模擬外部函式 (simulated efunctions (simul_efuns) )

mudlib  可以撰寫模擬的外部函式 (efunction). 所有模擬的外部函式必須定義在
一個特殊的檔案中 (此檔案的名稱及目錄位置定義在 config.example 中)  (譯按
: config.example 為一個示範檔案, 是啟動 driver  程式時必須讀取的 mud  組
態檔. 手上有 ES 2 mudlib 的人, 可以在 es2/adm/etc 目錄中找到 config.ES2
這個檔案. 有 MudOS v21c2 原始碼的人, 在 MudOS_v21c2/src 目錄中可以找到
config.example) . 

編譯一個物件時, 發現一個函式呼叫 (非 call_other 呼叫) 在物件中沒有定義過,
也不是一個外部函式時, 則驅動程式會尋找模擬外部函式的名單, 看看此函式呼叫
是否為模擬外部函式. 如果名單上有此函式, 則驅動程式就以 call_other 的方式
呼叫此函式 (定義在模擬外部函式檔案裡面).  請注意, call_other  的傳回結果
不需要事先定型 (typecast),  因為編譯器會自動設定其型態.

模擬外部函式有許多用途. 其中一個是修改外部函式的作用 (甚至取消其作用),
卻不需要修改驅動程式 (只需要把模擬外部函式取名為相同的外部函式即可).  假
設您想修改 move_object()  外部函式, 您可以定義一個同名的模擬外部函式. 這
個也叫做 move_object()  的模擬外部函式可以用來檢查不同的條件限制, 然後再
呼叫 efun::move_object(). efun::  這個前置詞一定要加上去, 驅動程式才知道
您想呼叫原來的 move_object()  外部函式, 而不是重覆呼叫一次模擬的
move_object().  (請注意, master.c 裡的 valid_override() 可以用來控制 
efun::  到底可以對哪一個模擬外部函式越權 (override).  模擬外部函式也可以
加上一些函式, 這些函式也許有許多物件需要呼叫它們, 卻不適合放在一個繼承物
件的檔案中.

所有在模擬外部函式檔案中, 宣告為靜態 (static) 的函式, 不能從模擬外部函式
檔案以外去呼叫它.

翻譯: Spock @ FF	97.Aug.9.
