2011-01-12 61 views
5

我幾天前開始在Lua編程。我已經熟悉了這個語法,並且我設法爲Prosody XMPP服務器編寫了一個模塊。我跑到了Prosody服務器配置中的一段代碼(這是在Lua中)。幫我理解這段Lua代碼

VirtualHost "example.com" 
    enabled = false; 
    ssl = { 
    key = "certs/example.com.key"; 
    certificate = "certs/example.com.crt"; 
    }; 

我想弄清楚第二行中的表是如何鏈接到第一行的。

它是VirtualHost函數的參數嗎?即代碼可以寫成:

VirtualHost "example.com", { 
    enabled = false; 
    ssl = { 
    key = "certs/example.com.key"; 
    certificate = "certs/example.com.crt"; 
    }; 
}; 

是否有一些我需要進一步研究的Lua概念?

+0

我覺得這個堆棧交換[提案](http://area51.stackexchange.com/proposals/11464/code-review?referrer=aWNm_PdciyFqjFW8CUacGw2「代碼審查」)可能會對你有利。如果它顯示你的支持,並幫助它進入測試版! :) – greatwolf 2011-01-17 00:06:58

回答

10

第一行和其他行之間沒有直接聯繫。第一行等同於VirtualHost("example.com") - 如果函數調用僅傳遞一個字符串參數,則不需要括號。

看着韻律的源代碼,這裏發生了什麼是加載配置文件中的代碼使用的setfenvsetmetatable陷阱組合寫入全局變量(sslenabled)。當您編寫enabled = false時,它實際上並沒有設置全局變量enabled,而是調用由Prosody代碼定義的函數,該函數在當前定義的虛擬主機上設置屬性。

這全部在core/configmanager.lua的parsers.lua.load函數中實現。

你可以閱讀有關setfenvheresetmetatablehere(特別是此代碼使用__newindex metamethod)。

+0

非常感謝,幫助我! – 2011-01-12 20:21:18