Hello!
2013/7/30 huang kun:
>
> function getParam()
>
> return "ttt1"
>
> end
>
> ngx.say(getParam())
>
>
> 其中getParam没有用local修饰,那么其他lua文件中如果也有同名的函数会有什么问题吗?
应当总是加上 local 关键字来定义函数。因为一方面性能会提高(Lua VM
有机会做更多的优化),另一方面也可以避免很多作用域方面的副作用问题(就像 C 程序员会尽量避免使用全局变量,即使是单线程的应用)。
“其他 Lua 文件”这个描述太笼统,可能的具体情况很多,我不知道该如何回答你。
> 目前测试没发现问题,但有什么情况下会出现没有用local修饰变量,结果被同名变量覆盖的情况呢?哪位给举个例子
>
建议首先学习一下 Lua 语言的变量作用域。而在 ngx_lua 的上下文中,全局变量是应当绝对避免的,否则你很容易遇到很多奇怪的问题,因为
ngx_lua 中的全局环境表是每请求的:
http://wiki.nginx.org/HttpLuaModule#Lua_Variable_Scope
这个邮件列表里报告的因为滥用全局变量来导致的诡异问题有不少;我不希望你成为下一个 :)
Regards,
-agentzh