标签:des style class blog code java
----本文摘自programming in lua
如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)
当一个函数内部嵌套另一个函数定义时,内部的函数体可以访问外部的函数的局部变量,这种特征我们称作词法定界。虽然这看起来很清楚,事实并非如此,词法定界加上第一类函数在编程语言里是一个功能强大的概念,很少语言提供这种支持。
下面看一个简单的例子,假定有一个学生姓名的列表和一个学生名和成绩对应的表,现在想根据学生的成绩从高到低对学生进行排序,可以这样做: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
看下面的代码:
function newCounter() local i = 0 return function() -- anonymous function i = i + 1 return i end end
c1 = newCounter() print(c1()) --> 1 print(c1()) --> 2
c2 = newCounter() print(c2()) --> 1 print(c1()) --> 3 print(c2()) --> 2
function digitButton (digit) return Button{ label = digit, action = function () add_to_display(digit) end } end
oldSin = math.sin math.sin = function (x) return oldSin(x*math.pi/180) end
do local oldSin = math.sin local k = math.pi/180 math.sin = function (x) return oldSin(x*k) end end
do local oldOpen = io.open io.open = function (filename, mode) if access_OK(filename, mode) then return oldOpen(filename, mode) else return nil, "access denied" end end end
标签:des style class blog code java
原文地址:http://blog.csdn.net/x356982611/article/details/29811969