标签:style blog http color java 使用 os strong
lua官方英文文档:http://www.lua.org/manual/5.2/
lua中国开发者网址:http://bbs.luaer.cn/
for k1,v1 in pairs(tbl) do for k2,v2 in pairs(v1) do ... end end
这里,pairs 其实是一个全局变量应用的函数。如果我们这样做:
do local pairs=pairs for k1,v1 in pairs(tbl) do for k2,v2 in pairs(v1)do ... end end end
效率会稍微提高一些。如果是单层循环,这样做就没有意义。因为 for ... in 循环中的 pairs 这个函数只会被调用一次,而不是每次循环都去调。我们的原则其实是,被多次读取的 global 变量,都应该提取出来放到 local 变量中。
function point (x,y) return function() return x,y end end -- 使用范例 p=point(1,2) print(p())-- 输出 1 2
如果你愿意,还可以做的复杂一点:
function point (x,y) return function(idx) if idx=="x" then return x elseif idx=="y" then return y else return x,y end end end -- 使用范例 p=point(1,2) print(p("x"))-- 1 print(p("y"))-- 2
x,y 实际被存放在 closure 里,每次调用 function point 都有一份独立的 closure。当然,function 的 code 只有一份。
function inherit(sub,super) setmetatable(sub, { __index=function(t,k) local ret=super[k] sub[k]=ret return ret end}) end
function foo(arg) arg=arg or"default" ... end
利用 or 运算赋缺省值是最常用的技巧。上例中,如果 arg 为 nil ,arg 就会被赋值为 "default" 。但是这个技巧有个缺陷,当缺省值是 true 的时候会有点问题。
a=a ortrue-- 错误的写法,当 a 明确写为 false 的时候,也会被改变成 true 。 a= a ~= false-- 正确的写法,当 a 为 nil 的时候,被赋值为 true ;而 false 则不变。
另外,巧妙使用 and or 还可以实现类似 C 语言中的 ?: 三元操作:
function max(a,b) return a>b and a or b end
上面这个函数可以返回 a 和 b 中较大的一个,其逻辑类似 C 语言中的 return (a>b) ? a : b ;
标签:style blog http color java 使用 os strong
原文地址:http://www.cnblogs.com/yyxt/p/3890342.html