最近項目中遇到一個奇怪的問題,因爲項目代碼邏輯須要用到tolua++裏暴露的tolua.cast來實現類型轉換,在windows的vs環境下調試式沒有問題,可是在ios或者mac上調試xcode工程時,發現tolua變成了一個function,而不是一個對象,很讓人奇怪。追查發如今lua引擎啓動時,有一個針對IOS或者Mac條件編譯宏,當在IOS或Mac下時,會調用wax.h中的wax_start函數,追入到該函數(位於wax.m)文件時,發現其調用的wax_setup調用了一個叫作addGlobals()的函數。繼續跟蹤addGlobals()函數發現,在其中註冊了一個wax.m中的函數,而該函數的名字也偏偏叫作tolua,所以覆蓋了在此以前tolua_map.c中的tolua_open函數裏註冊的tolua模塊,致使該上述奇怪問題的產生,解決辦法也很簡單,wax.m的該註冊註釋掉或者改下函數名註冊,可是會不會引發其餘問題暫時還不肯定,還有待考察。因此有時候對lua或者js這類語言有時候很容易出現全局函數覆蓋的問題,因此最好的編碼風格仍是註冊全局函數或者變量的時候要綴上命名空間前綴才能很大程度上的避免此類問題ios