最近项目中遇到一个奇怪的问题,因为项目代码逻辑须要用到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