目录
非局部的变量(non-local variable):由于一些历史原因,在Lua中“非局部的变量”也称为upvalue
第一类值(First-Class Value)
-
词法域(Lexical Scoping)
-
高阶函数(higher-order function)
像table.sort这样的函数,接受另一个函数作为实参的,称其是一个“高阶函数”
-
非局部的变量(non-local variable):由于一些历史原因,在Lua中“非局部的变量”也称为upvalue
那么下面给出两个例子,比较upvalue和局部变量,前者是 upvalue,后者是函数的局部变量,所以声明一次便产生一个闭合和一个新的局部变量i
图1
图2
-
闭合函数(closure)和函数之间的关系
原文:Thchnically speaking, what is a value in Lua is the closure, not the function.The function itself is just a prototype for closures.
结合前面讲过的upvalue和局部变量的区别,那么下面的解释迎刃而解。
-
正确的尾调用(proper tail call)
当一个函数调用是另一个函数的最后一个动作时,该调用才算是一条“尾调用”。只有“return <func>(<args>)”这样的调用形式才算是“尾调用”。由于“尾调用”不会耗费栈空间,所以一个程序可以拥有无数嵌套的“尾调用”。
上述设计的优点以及发散性展开思维思考。