(2012-04-12 23:32:35)

 
函数
 定义
    function mytest(a,b,c) <函数体> end
    mytest = function(a,b,c) <函数体> end
    local function mytest(a,b,c) <函数体> end
    local mytest = function(a,b,c) <函数体> end
    t = {} t.mytest = function(a,b,c) <函数体> end
    t = { mytest = function(a,b,c) <函数体> end}
    t = {} function t.mytest(a,c,b) <函数体> end
 
  调用
    基本调用 
        a,b,c = mytest(1,2,3)
    冒号语法糖调用
        o.foo(o,x) = o:foo(x) 
        使用冒号调用时会把冒号前的内容当作函数的第一个参数传入
    多重返回值
        function mytest()
                return 1,2,3
        end
        a,b = mytest()
        assert(a==1 and b==2)
        a,b,c,d = mytest()
        assert(c==3 and d==nil)
        assert(select("#",mytest()==3))
    变长参数
        function mytest(...)
                a,b=...
                return a,b
        end
        a,b = mytest(1,2)
        assert(a==1 and b==2)
         "..."是表达式,代表变长参数如:return ...就是返回所有传入的参数
        {...}代表所有变长参数的集合,可以象使用table的一样访问也可以用ipairs{...}遍历
        select函数操作访问变长参数的能力
        select(n, ...)访问第n个参数
        select("#", ...)获得参数个数
    特殊调用
        当函数仅有一个参数并且是字符串时可以使用 mytest "wangning"方式,不用写()
        当函数仅有一个参数并且是table时可以使用 mytest {a=1, b=2, c=3}的方式,不用写()
    具名实参
        function showwindow(opt)
                print(opt.x)
                print(opt.y)
                 print(opt.title)
                print(opt.text)
        end
        showwindow {x=0, y-0, title="hi!", text="helloworld"}
 
  闭包(词法域)
    在函数内定义函数,内部函数可以访问外部函数的变量
        function mytest()
                local i = 0
                return function()
                i = i + 1
                return i
                end
        end
        my = mytest()
        print(my()) --> 1
        print(my()) --> 2
        my1 = mytest()
        print(my1()) -->1
        print(my1()) -->2
        print(my()) --> 3
    函数式编程的基础
    可以实现如迭代器之类的功能,实用性很高
    这种形式就是实现了单一功能的类的对象
 
  尾调用消除 tail-call elimination
    最后一句如果是一个函数调用就是尾调用
    相当于goto,也可用于状态机
    当前函数真正结束,不会在栈中了
    return <func>(<args>)才是真正的尾调用
    function f(x) g(x) end不是尾调用,它还会回来
 

lua学习笔记(六)的更多相关文章

  1. [转]LUA 学习笔记

    Lua 学习笔记 入门级 一.环境配置 方式一: 1.资源下载http://www.lua.org/download.html 2.用src中的源码创建了一个工程,注释调luac.c中main函数,生 ...

  2. Lua 学习笔记(一)

    Lua学习笔记 1.lua的优势 a.可扩张性     b.简单     c.高效率     d.和平台无关 2.注释 a.单行注释 --        b.多行注释 --[[  --]] 3.类型和 ...

  3. Lua学习笔记6:C++和Lua的相互调用

        曾经一直用C++写代码.话说近期刚换工作.项目组中的是cocos2dx-lua,各种被虐的非常慘啊有木有.     新建cocos2dx-lua项目.打开class能够发现,事实上就是C++项 ...

  4. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  5. Lua学习笔记4. coroutine协同程序和文件I/O、错误处理

    Lua学习笔记4. coroutine协同程序和文件I/O.错误处理 coroutine Lua 的协同程序coroutine和线程比较类似,有独立的堆栈.局部变量.独立的指针指令,同时又能共享全局变 ...

  6. Learning ROS for Robotics Programming Second Edition学习笔记(六) indigo xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  7. Typescript 学习笔记六:接口

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  8. (转)Lua学习笔记1:Windows7下使用VS2015搭建Lua开发环境

    Lua学习笔记1:Windows7下使用VS2015搭建Lua开发环境(一)注意:工程必须添加两个宏:“配置属性”/“C或C++”/“预处理器”/“预处理器定义”,添加两个宏:_CRT_SECURE_ ...

  9. python3.4学习笔记(六) 常用快捷键使用技巧,持续更新

    python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...

  10. Go语言学习笔记六: 循环语句

    Go语言学习笔记六: 循环语句 今天学了一个格式化代码的命令:gofmt -w chapter6.go for循环 for循环有3种形式: for init; condition; increment ...

随机推荐

  1. King of Karaoke

    King of Karaoke Time Limit: 1 Second Memory Limit: 65536 KB It's Karaoke time! DreamGrid is performi ...

  2. ZOJ 3937 More Health Points (2016 浙江省赛 B题,可持久维护凸壳)

    题目链接  2016 ZJCPC Problem B 题意  CF 660F的树上版本. 其他做的方法都差不多,关键是把凸壳放到树上. 每次确定扔掉几个元素的时候直接$O(1)$修改(先不清楚这个位置 ...

  3. HDU 5732 Subway(2016多校1J,树的重心 + 哈希)

    题目链接  2016多校1 Problem J 题意  给定两棵相同的树,但是编号方案不同.求第一棵树上的每个点对应的第二棵树上的点.输出一种方案即可. 首先确定树的直径的中点.两棵树相等意味着两棵树 ...

  4. Python的程序结构[3] -> 变量/Variable[0] -> 变量类型

    变量类型 / Variable Type 在 Python 中,变量主要有以下几种,即全局变量,局部变量和内建变量, 全局变量 / Global Variable 通常定义于模块内部,大写变量名形式存 ...

  5. luogu P1373 小a和uim之大逃离

    题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...

  6. [POI2014]Tourism

    题目大意: 给定一个$n(n\le20000)$条个点,$m(m\le25000)$条边的无向图,保证图中最长路径上的点数不超过$10$.对一个点染色的代价是$w_i$.求使得每个结点都被染色或至少有 ...

  7. iOS开发 Swift开发数独游戏(一)

    一.前言 我姥姥是一名退休数学老师,一直很喜欢玩数独游戏.我以前答应过她要给她写一个数独游戏.本来计划是写一个Android应用的,但恰好我学了好长时间iOS开发一直没做什么"大项目&quo ...

  8. UIActivityIndicatorView活动指示器

    活动指示器(UIActivityIndicatorView)可以告知用户有一个操作正在进行中.派生自UIView,所以他是视图,也可以附着在视图上. 一.创建 UIActivityIndicatorV ...

  9. UBIFS 术语

    B+ tree: base head: budgeting: 空闲空间评估 bud: 一个日志使用的eraseblock cnode: commit: 更新index到flash上的过程 commit ...

  10. ResourceBundle (读取properties文件及中文乱码解决方法)

    原文:http://blog.csdn.net/joecheungdishuiya/article/details/6304993 public class test { static Resourc ...