《Lua程序设计》第6章 深入函数 学习笔记

在Lua中,函数是一种“第一类值(First-Class Value)”,它们具有特定的词法域(Lexical Scoping)。
“词法域”:函数可以潜逃在另一个函数中,内部的函数可以访问外部函数中的变量。它允许Lua在应用各种函数式语言(functional-language)中的强大编程技术。

Lua中最常见的函数编写方式,如:
function foo (x) return 2*x end
只是一种所谓的“语法糖”而已。也就是说,这只是以下代码的一种简化书写形式:
foo = function (x) return 2*x end
可以将表达式“function(x) <body> end”视为一种函数的构造式,将这种函数构造式的结果称为一种函数的构造式。
【匿名函数示例】
table哭啼攻了一个函数table.sort,它接受一个table并对其中的元素排序。
network = {
    {name = "grauna", IP = "210.26.30.34"},
    {name = "arrival", IP = "210.26.30.23"},
    {name = "lua", IP = "210.26.23.12"},
    {name = "derain", IP = "210.26.23.20"}
}
如果想以name字段、按反向的字符顺序来对这个table排序的话,只需这么写:
table.sort(network, function (a,b) return (a.name > b.name) end)
像sort这样的函数,接受另一个函数作为实参的,称其为一个高阶函数(high-order function)。

6.1 closure(闭合函数)
http://www.cnblogs.com/moonlightpoet/p/5684850.html


6.2 非全局的函数(non-global function)
……

6.3 正确的尾调用(proper tail call)
由于“尾调用”不会消耗栈空间,所以一个程序可以拥有无数嵌套的“尾调用”。
http://www.cnblogs.com/moonlightpoet/p/5685075.html

原文地址:https://www.cnblogs.com/moonlightpoet/p/5685085.html