您的位置:首页 > 编程语言 > Lua

lua简洁的功能(两)

2015-06-05 18:25 295 查看
Lua中的函数带有词法定界的第一类值。

第一类值: 在Lua中,函数和其它值(数值,字符串)一样,函数能够被存放在变量中,也存放在表中, 能够作为函数的參数,还能够作为函数的返回值。
词法定界:被嵌套的函数能够訪问他外部函数的变量。

lua的函数也能够是匿名的,当我们提到函数名时,实际上是说一个指向函数的变量。

闭包
词法界定加上第一类函数是一个功能强大的概念。
function sortbygrade(names, grades)
table.sort(names, function(n1,n2)
return grades[n1]>grades[n2]
end)
end
在匿名函数内部grades称为是外部的局部变量或upvalue

闭包在上下文环境中提供非常实用的功能。可作为高级函数的參数,可作为函数嵌套的函数(比方返回一个闭包),能够作为回调函数。利用闭包能够又一次定义某个函数,当别人调用某个函数时,调用到自定义的做了安全检查的函数,从而创建了一个安全的环境(沙箱)
do
local oldopen = io.open
io.open = function(f,m)
if access_ok(f,m) then
return oldopen(f,m)
else
return nil, "access denied"
end
end
end

非全局函数
函数作为table的域(大部分lua库函数使用这样的机制实现的。如io.read,math.sin)
有3种语法方式:

1.
lib = {}
lib.foo = function(x,y) return x+y end
2.
lib = {foo = function(x,y)return x+y end}
3.
lib = {}
function lib.foo(x,y)
return x+y
end

(完)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: