Hello!
2013/9/11 Huang ChuanTong:
> 代码1:
> ngx.header['Set-Cookie'] = {'k1=a; path=/'} -- 这里是只有一个值table
> ngx.log(ngx.ERR, ' get type->', type(ngx.header['Set-Cookie']))
> -- 输出 get type-> string
>
> 代码1:
> ngx.header['Set-Cookie'] = {'k1=a; path=/', 'k2=b; path=/'}
> ngx.log(ngx.ERR, ' get type->', type(ngx.header['Set-Cookie']))
> -- 输出 get type-> table
>
> 不理解为什么赋值一个table,马上取出来已经是string?
当读取响应头的时候,单值是 string 类型,多值是 table 类型。
> 是实现了对 等号= 或者 取值的中括号 ngx.header[] 的重载吗?
这里使用了 Lua 的元方法 __index 和 __newindex,见 Lua 5.1 官方手册:
http://www.lua.org/manual/5.1/manual.html#2.8
> 为什么不实现得与lua语法一样?
>
这里用的就是标准的 Lua 5.1 语法。。。我并没有对 Lua 语言本身进行修改呀。。。不过,回过头来看,我其实有些后悔在 ngx_lua
的一些最早的 Lua API 中使用基于元方法的语法糖,如果我现在重新设计,我会选择显式的 Lua 函数调用的形式,即
ngx.resp.set_header(name, values) 和 ngx.resp.get_header(name)。显式的 Lua
函数调用也更容易为 Lua VM 优化。
Regards,
-agentzh