在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

《Lua程序设计》第6章 深入函数 学习笔记的更多相关文章

  1. C++学习基础十六-- 函数学习笔记

    C++ Primer 第七章-函数学习笔记 一步一个脚印.循序渐进的学习. 一.参数传递 每次调用函数时,都会重新创建函数所有的形参,此时所传递的实参将会初始化对应的形参. 「如果形参是非引用类型,则 ...

  2. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  3. 《Lua程序设计》第5章 函数 学习笔记

    Lua为面向对象式的调用也提供了一种特殊的语法——冒号操作符.表达式o.foo(o, x)的另一种写法是o:foo(x),冒号操作符是调用o.foo时将o隐含地作为函数的第一个参数.Lua可以调用C语 ...

  4. JavaScript高级程序设计(第三版)学习笔记6、7章

    第6章,面向对象的程序设计 对象: 1.数据属性 configurable,表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或能否把属性修改为访问器属性,默认为true ‚en ...

  5. C++ Primer Plus 第四章 复合类型 学习笔记

    第四章 复合类型 1. 数组概述 1.1 数组的定义 数组(array)是一种数据格式,能够存储多个同类型的值.每个值都存储在一个独立的数组元素中,计算机在内存中依次存储数组的各个元素. 数组声明的三 ...

  6. 编写C函数的技术-《lua程序设计》 27章 学习

    1.数组操作 void lua_rawgeti(lua_State * L ,int index,int key) void lua_rewseti(lua_State * L,int index,i ...

  7. JavaScript高级程序设计(第三版)学习笔记20、21、23章

    第20章,JSON JSON(JavaScript Object Notation,JavaScript对象表示法),是JavaScript的一个严格的子集. JSON可表示一下三种类型值: 简单值: ...

  8. lua元表和元方法 《lua程序设计》 13章 读书笔记

    lua中每个值都有一个元表,talble和userdata可以有各自独立的元表,而其它类型的值则共享其类型所属的单一元表.lua在创建table时不会创建元表. t = {} print(getmet ...

  9. JavaScript高级程序设计(第三版)学习笔记22、24、25章

    第22章,高级技巧 高级函数 安全的类型检测 typeof会出现无法预知的行为 instanceof在多个全局作用域中并不能正确工作 调用Object原生的toString方法,会返回[Object ...

随机推荐

  1. Mxnet学习资源

    MxNet 学习笔记(1):MxNet中的NDArray http://mxnet.incubator.apache.org/api/python/symbol/symbol.html api文档 M ...

  2. struts2系列(一):struts2入门(struts2的产生、struts2的工作流程、搭建struts2开发环境)

    一. struts2的产生 struts1的缺点:                         1. ActionForm过多,而且这个ActionForm在很大程度上又和VO(POJO)重复  ...

  3. Couchbase 集群小实践

    局域网 两台机  192.168.1.2  我们称为A机器   192.168.1.3   我们称为B机器   配置集群的时候,从A或者是B的web后台都可以添加, 在这里 我们以 A机器为主   目 ...

  4. FastJson---高性能JSON开发包

    SVN:http://code.alibabatech.com/svn/fastjson/trunk/WIKI:http://code.alibabatech.com/wiki/display/Fas ...

  5. iOS7以上: 实现如“日历”的 NavigationBar

    第一步,隐藏导航栏底部的分割线 如何隐藏导航栏底部的分割线(shadow image/ hairline)? navigationBar.clipsToBounds = YES; //隐藏 navig ...

  6. DataTable内容导出为CSV文件

    CSVHelper.cs内容: using System; using System.Collections.Generic; using System.Linq; using System.Text ...

  7. scala中获取Map中key和value的方法

    val scores=Map("Alice"->10,"Bob"->3,"Cindy"->8) // 获取所有的key v ...

  8. Linux系统安装workerman,启动wss 服务

    安装workerman其实很简单,只要会简单的linux口令就可以搞定, 这里我给大家演示一下如何安装workerman 进入终端的过程就不用演示了吧... 输入root及密码进入终端后找到站点根目录 ...

  9. centos图形界面的开启和关闭

    一般来说centos主要用于服务器端,所以很少开启图形化界面,但是有时候为了工作方便也会偶尔开启图形界面,下面就让简单谈谈如何开启图形化界面, 当然简化安装是没有这个程序的需要自行安装,可以yum安装 ...

  10. 通过phoenix在hbase上创建二级索引,Secondary Indexing

    环境描述: 操作系统版本:CentOS release 6.5 (Final) 内核版本:2.6.32-431.el6.x86_64 phoenix版本:phoenix-4.10.0 hbase版本: ...