标签(空格分隔): Lua


1. Lua可以一次性给多个变量赋值

  • 变量比赋值多,多的变量就赋值nil
  • 变量比赋值少,多的赋值舍弃
  1. local a, b, c = 1, 2, 3
  2. print( a, b, c)
  3. local a, b, c = 1, 2
  4. print(a, b, c)
  5. local a, b, c = 1, 2, 3, 4
  6. print(a, b, c)
  7. 输出:
  8. 1 2 3
  9. 1 2 nil
  10. 1 2 3

2. lua代码块

  1. do ...
  2. end

3.lua控制语句

3.1 条件判断

  1. if ... then
  2. ...
  3. elseif ... then
  4. ...
  5. else
  6. ...
  7. end

3.2 循环迭代

3.2.1 repeat ... until true --> 条件成立退出

  1. local a = 1
  2. repeat
  3. print(a)
  4. a = a + 1
  5. until a >= 2
  6. 输出:1

3.2.2 while ... do ... end --> 条件不成立退出

  1. local i = 1
  2. while i < 3 do
  3. print(i)
  4. i = i + 1
  5. end
  6. 输出:
  7. 1
  8. 2

3.2.3 for from, to, step do ... end step可以省略,默认不写的话是每次加1

  1. for i=1, 2 do
  2. print(i)
  3. end
  4. -- 上下程序作用一样
  5. for i=1, 2, 1 do
  6. print(i)
  7. end
  8. 输出:
  9. 1
  10. 2
  11. 1
  12. 2

3.2.4 迭代函数ipairs 和pairs,ipairs只针对有序表,其中ipairs循环中如果遇到nil,循环就结束了

  1. local list = {1, 2, 3, a = 12, b = 14}
  2. for i,v in ipairs(list) do
  3. print(i, v)
  4. end
  5. 输出:
  6. 1 1
  7. 2 2
  8. 3 3
  9. local list = {1, 2, 3, a = 12, b = 14}
  10. for i,v in pairs(list) do
  11. print(i, v)
  12. end
  13. 输出:
  14. 1 1
  15. 2 2
  16. 3 3
  17. a 12
  18. b 14
  19. local list = {1, nil, 2, 3, a = 12, b = 14}
  20. for i,v in ipairs(list) do
  21. print(i, v)
  22. end
  23. 输出:
  24. 1 1

4. function

4.1 闭包函数

  1. function closureFunction(x)
  2. return function ()
  3. x = x + 1
  4. print(x)
  5. end
  6. end
  7. local f = closureFunction(100)
  8. print(f())
  9. print(f())
  10. print(f())
  11. local ff = closureFunction(200)
  12. print(ff())
  13. 输出:
  14. 101
  15. 102
  16. 103
  17. 201

只要f没有销毁,x值就变相的成为全局变量(相对于f调用),如果是重新调用closureFunction还是原来的值

4.2 函数尾调用

  • 形式:就是在函数的最后返回处返回函数
  • 作用:可以解决例如递归时堆栈过大问题,因为尾调用的一个性质就是直接进入尾调用函数的堆栈并且抛弃现在在使用函数的堆栈,也就是说,进入尾调用函数后是不会恢复上一个函数的堆栈的
  1. function closureFunction(x)
  2. return function ()
  3. x = x + 1
  4. print(x)
  5. end
  6. end
  7. local function recursionFunction( x )
  8. if x > 1 then
  9. return recursionFunction(x - 1)
  10. else
  11. return print('done')
  12. end
  13. end
  14. recursionFunction(99999)

4.3 函数的不定参数

  1. function functionName( ... )
  2. ---[=[
  3. print(#arg)
  4. print(unpack(arg))
  5. --[[ local list = {...}
  6. print(#list)
  7. print(unpack(list))
  8. for i=1,#list do
  9. print(list[i])
  10. end
  11. --]]
  12. --]=]
  13. end
  14. functionName(1, 2, 3)
  15. end

以上是不定参数的两种不同读取参数方法,#是用来获取字符长度或者表长度(只限于有序表)

4.4 .和:的区别

  1. local list = {}
  2. function list.say( helloworld )
  3. print(helloworld)
  4. end
  5. list.say("helloworld")
  1. local list = {}
  2. function list:say( helloworld )
  3. print(helloworld)
  4. end
  5. list:say("helloworld")
  6. list.say("do","helloworld")

区别在于 函数参数开始时,:比.多传递了一个参数

:定义的函数可以用.来访问,.定义的函数如果用:访问一般会产生问题

5. lua中的三目运算实现

  1. local a = 5
  2. a = a > 4 and a or 1
  3. print(a)
  4. 输出:
  5. 5

注意:a不能是nil或者false

Lua 基础 -- 学习笔记的更多相关文章

  1. 【C#编程基础学习笔记】4---Convert类型转换

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...

  2. 【C#编程基础学习笔记】6---变量的命名

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...

  3. lua本学习笔记功能

    Lua本学习笔记功能 1.  函数返回 指定任务的主要功能是完成,在这种情况下,函数被用作调用语句.函数可以计算并返回值,在这种情况下,作为分配值表达式语句使用. 语法: funcationfunc_ ...

  4. 1.C#基础学习笔记3---C#字符串(转义符和内存存储无关)

    技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com ------------------------------------- ...

  5. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  6. Mysql数据库基础学习笔记

    Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...

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

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

  8. Java基础学习笔记(一)

    Java基础学习笔记(一) Hello World 基础代码学习 代码编写基础结构 class :类,一个类即一个java代码,形成一个class文件,写于每个代码的前端(注意无大写字母) XxxYy ...

  9. C#RabbitMQ基础学习笔记

    RabbitMQ基础学习笔记(C#代码示例) 一.定义: MQ是MessageQueue,消息队列的简称(是流行的开源消息队列系统,利用erlang语言开发).MQ是一种应用程序对应用程序的通信方法. ...

随机推荐

  1. 《JS权威指南学习总结--8.8.3 不完全函数》

    内容要点: 本节讨论的是一种函数变换技巧,即把一次完整的函数调用拆成多次函数调用,每次传入的实参都是完整实参的一部分,每个拆分开的函数叫做不完全函数(partial function),每次函数调用叫 ...

  2. 1、MySql的安装和连接测试并给root用户赋密码

    一.mysql数据库的安装 Windows下MySQL的配置 以 MySQL 5.1 免安装版为例, 下载 mysql-noinstall-5.1.69-win32.zip ( 官方下载页: http ...

  3. 一个简单的Servlet工具

    以前老师在项目中用过一个Sevlet的工具,就是在请求Servlet的时候带一个参数,该参数决定要执行Servlet中的方法, public class ServletUtils extends Ht ...

  4. flex安装debug

    1.解决 不是最新版本的问题: cmd-->regedit-->HKEY_LOCAL_MATCHING-->SOFTWARE-->MACROMEDIA -->FLASHP ...

  5. Python学习笔记第一天

    Python是一门通用脚本语言,灵活,实用,而不用关心本身的实现逻辑! Python通常在linux下编程,有两种方式!当然,为了使用linux文本编辑,所选模式为 非 交互模式! 交互式:简单,方便 ...

  6. OMCS开发手册(02) -- 多媒体连接器

    OMCS开发手册(01) -- 多媒体设备管理器 一文,我们从Owner的角度详细描述了多媒体设备管理器的使用,本文我们将站在Guest的角度,描述OMCS中另一类组件/控件:多媒体连接器.多媒体连接 ...

  7. css样式的部分拓展, NuMber对象、 BoM、 DoM对象的模型的间述,ing...

    css部分代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...

  8. css3部分属性兼容性别扭写法(因为很多我就叫他别扭了,希望全面早早支持css3吧)

    /*圆角class,需要设置圆角的元素加上class名称*/ .roundedCorners{ -webkit-border-radius: 10px;/*webkit内核浏览器*/ -moz-bor ...

  9. Nginx简单配置,部分来源于网络

    nginx.conf listener监听端口 server_name监听域名 location{}是用来为匹配的 URI 进行配置,URI 即语法中的“/uri/”.location  / { }匹 ...

  10. 接口post +json +bean

    public ReturnBean<DealBean> getMember(String tagtype, String tag) { try { String requestUrl = ...