(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. 51nod 1004 n^n的末位数字【快速幂】

    1004 n^n的末位数字 题目来源: Author Ignatius.L (Hdu 1061) 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 给出 ...

  2. ACM的奇计淫巧系列

    突然想写个系列,算是总结总结集训中遇到的各种黑科技吧,这是目录 ACM的奇计淫巧_输入挂 ACM的奇计淫巧_扩栈C++/G++ ACM的奇计淫巧_bitset优化

  3. luogu P3834 【模板】可持久化线段树 1(主席树)

    题解真的是越写越懒 // luogu-judger-enable-o2 #include<cstdio> #include<algorithm> using std::sort ...

  4. 【bzoj1566】【管道取珠】竟然是dp题(浅尝ACM-E)

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=61891436 向大(hei)佬(e)势力学(di ...

  5. JsonConfig处理日期时间

    写在前面: 页面发送ajax请求到后台,后台返回对应的json格式数据给前台页面进行数据展示,如果json数据中含有日期时间,就需要对日期进行处理 下面是相关的代码部分 JsonConfig json ...

  6. static静态变量-投票案例

    public class Voter { String name; //名字 private static int count; //投票数 public Voter() {} public Vote ...

  7. zlib stream

      官方帮助手册 http://www.zlib.net/manual.html   #include <stdlib.h> #include <string.h> #incl ...

  8. 【power designer】使用power designer编辑pdm物理模型图时,为字段添加中文备注

    如下图: 1.双击下图修改 应用如下 2.为数据列添加备注属性 然后为备注列添加 中文备注 [注意,这里有个小技巧,如果光标已经点进去这个单元格,是不能复制进去文字的,但是第一次点击单元格,是可以复制 ...

  9. 推荐一款Java反编译器,比较好用

    转自:http://www.blogjava.net/xmatthew/archive/2008/10/28/237203.html 推荐一款Java反编译器,也使用了挺久的了,感觉还是很好用,就拿出 ...

  10. Linux使用nginx部署Laravel

    问题描述 Laravel是PHP下当今最受欢迎的web应用开发框架,github上start数远超第二名Symfony,以前我用这个框架做项目的时候通常就是扔到apache里面,然后配置.htacce ...