v room
看了jjgod的《虛擬物件faq》,fengs有講了一下。
我又去看了一下lima的源代碼,終於有點明白了。
不知道對不對,說說我的理解。
當new(file)的時候,如果file不存在,mudos就回去呼叫master_ob中的
complie_file函數。
esII的這個函數是這樣的:
mixed compile_object(string file)
{
object daemon;
if (daemon = find_object(VIRTUAL_D))
return daemon->compile_object(file);
else
return 0;
}
我看了VIRTUAL_D,好像什麼也沒幹,最多就是生成迷宮,總覺得大材小用了,
畢竟是master_ob都參與了的過程啊。:)
但是lima的compile_object()是有重要作用的
lima有一種東西叫做script。就是通過他自己定義的一種腳本來創建object
這種文件是*.scr。是可以用new(*.scr)這種形式來載入的。
實際上這就是compile_object()在起作用
這個函數的開頭就有一個:
if(sscanf(file,"%s.scr",name)) return LPCSCRIPT_D->compile(file);
顯然,如果傳入.scr文件,系統就會clone一個標準物件然後按照script設置
數值,這樣可以降低區域編寫的難度。
甚至動態生成區域。
而這種object,他的file_name()傳回的是new(file)離那個file,就是說
是那個腳本,而不是那個標準物件,又可以把標準物件的幾個copy
方便的區分。
另外,jjgod的faq裡說
1. 不需要銷毀的問題,不會有垃圾產生;
2. 可以用各種標示符來標記,而不像普通的複製出來的物件只能是「#數字 」
的形式。
不懂,為什麼不需要銷毀?垃圾指的是什麼?是說臨時性的.c?
所謂各種標示符是什麼?不就是file_name()嗎?
還有其他的嗎?