lua中的函数--7

    科技2026-02-11  19

    1.封闭(Closures)

    例子如下:根据成绩对名字进行排名,成绩高的在前:

    names = {"Peter", "Paul", "Mary"} grades = {Mary=10, Paul=7. Peter=8} table.sort(names, function(n1,n2) return grades[n1] > grades[n2] --compare the grades end )

    写成函数:

    function sortbygrade(names, grades) table.sort(names, function(n1,n2) return grades[n1] > grades[n2] --compare the grades end) end

    以上函数中,grades这个变量被称为外部变量(external local variable,upvalue), 不是全局变量也不是局部变量。 第二个例子:

    function newCounter() local i = 0 return function() --- anonymous function i = i + 1 return i end end c1 = newCounter() print(c1()) --->1 print(c2()) --->

    尽管i已经在作用域外,因为已经返回,但是因为(closure)而能够正确处理这种情况。(封闭通常指的是一个函数能够加上自己的需要,并能够正确访问该upvalue)。如果我们再次调用newCounter,也将创建一个新的局部变量,因此获得一个新的封闭(closure)。

    c2 = newCounter() print(c2()) --->1 print(c1()) --->3 print(c2()) --->2

    关于封闭还有很多用处。

    Processed: 0.011, SQL: 9