标签(空格分隔): Lua


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

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

2. lua代码块

do ...
end

3.lua控制语句

3.1 条件判断

if ... then
...
elseif ... then
...
else
...
end

3.2 循环迭代

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

local a = 1
repeat
print(a)
a = a + 1
until a >= 2 输出:1

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

local i = 1
while i < 3 do
print(i)
i = i + 1
end 输出:
1
2

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

for i=1, 2 do
print(i)
end -- 上下程序作用一样
for i=1, 2, 1 do
print(i)
end 输出:
1
2
1
2

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

local list = {1, 2, 3, a = 12, b = 14}
for i,v in ipairs(list) do
print(i, v)
end 输出:
1 1
2 2
3 3 local list = {1, 2, 3, a = 12, b = 14}
for i,v in pairs(list) do
print(i, v)
end 输出:
1 1
2 2
3 3
a 12
b 14 local list = {1, nil, 2, 3, a = 12, b = 14}
for i,v in ipairs(list) do
print(i, v)
end 输出:
1 1

4. function

4.1 闭包函数

function closureFunction(x)
return function ()
x = x + 1
print(x)
end
end local f = closureFunction(100)
print(f())
print(f())
print(f())
local ff = closureFunction(200)
print(ff()) 输出:
101
102
103
201

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

4.2 函数尾调用

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

4.3 函数的不定参数

function functionName( ... )
---[=[
print(#arg)
print(unpack(arg))
--[[ local list = {...}
print(#list)
print(unpack(list))
for i=1,#list do
print(list[i])
end
--]]
--]=]
end functionName(1, 2, 3)
end

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

4.4 .和:的区别

local list = {}

function list.say( helloworld )
print(helloworld)
end list.say("helloworld")
local list = {}

function list:say( helloworld )
print(helloworld)
end list:say("helloworld")
list.say("do","helloworld")

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

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

5. lua中的三目运算实现

local a = 5
a = a > 4 and a or 1
print(a) 输出:
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. 3、Hibernate三态间的转换

    学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别 ...

  2. Delphi用ADOquery主从表例子(转)

    http://blog.csdn.net/kandy_zheng/article/details/1639184 在sql server 的northwide 中建立主表 create table s ...

  3. linux中的守护进程

    概念Daemon(精灵)进程,是Linux中的后台服务进程,生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.模型守护进程编程步骤1. 创建子进程,父进程退出所有工 ...

  4. CSS,height:auto和height:100%有什么区别?

    auto是随内容的高度而撑开的.100%是根据父级元素的高度来决定的.例如:<div style="height:100px;width:200px;"> <di ...

  5. NOIP2014-普及组复赛-第三题-螺旋矩阵

    题目描述 Description 一个n行n列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第1行第1列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转:重复上述操作直至经过矩阵 ...

  6. UISlider 滑竿控件

    UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake:(100, 100, 200, 25);  //创建一个滑竿对象 slide ...

  7. Laravel框架开发规范-修订前期版

    1.追加App/Models目录,App/User.php迁移至App/Models目录中 ①配置内容属于架构信息.服务器信息.有必要隐藏无法提交git的信息,请使用.env文件配合env()方法进行 ...

  8. 移动端解决input focus后键盘弹出,高度被挤压的问题

    //解决弹出键盘页面高度变化bug var viewHeight = window.innerHeight; //获取可视区域高度 $("input").focus(functio ...

  9. mac中eclipse安装openExplore插件

    插件地址:https://github.com/samsonw/OpenExplorer/downloads 将下载的jar包放入下面地址:应用程序->eclipse.app,右击->打开 ...

  10. java的(PO,VO,TO,BO,DAO,POJO)包解释

    java的(PO,VO,TO,BO,DAO,POJO)解释 action包  顾名思义请求,主要是和view 即我们所说的视图就是页面打交道,action类 是 操作方法,对于页 面Form 表单的操 ...