标签(空格分隔): 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. 《JS权威指南学习总结--8.8 函数式编程和8.8.1使用函数处理数组》

    内容要点:    和Lisp.Haskell不同,JS并非函数式编程语言,但在JS中可以像操控对象一样操控函数,   也就是说可以在JS中应用函数式编程技术.ES5中的数组方法(诸如map()和red ...

  2. mysql 数据列按照逗号转成行

    前言: 由于很多业务表因为历史原因或者性能原因,都使用了违反第一范式的设计模式.即同一个列中存储了多个属性值(具体结构见下表). 这种模式下,应用常常需要将这个列依据分隔符进行分割,并得到列转行的结果 ...

  3. sql 多个字段排序,头一个字段排序完,再对第二个字段进行排序(以此类推)

    现根据num排序,num数字相同的根据时间进行排序,都是降序DESC SELECT * FROM counts ORDER BY num DESC,create_time DESC

  4. Markdown 基础

    How to use Markdown H1 text. H2 text. H3 text. H4 text. H5 text. H6 text. Text This is italic text. ...

  5. 8.多线程和Socket通信

    一.多线程 1.进程的概念: 进程就是应用程序的执行实例,有独立的内存空间和系统资源.当一个应用程序没有执行的时候,它就不是一个进程.   2.进行的特征: (1)动态性:动态产生动态消亡. (2)并 ...

  6. jquery之全选全不选

    <input type="checkbox" onclick="selall(this)" />全选/全不选 <input type=&quo ...

  7. LeetCode OJ 63. Unique Paths II

    Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m ...

  8. digitalocean开通德国法兰克福机房,40Gb带宽,支持IPv6

    2015年4月15日,vps服务商digitalocean宣布正式开通德国法兰克福机房.5个月前digitalocean宣布筹备Germany机房中心,经过近1个月部署,总算与用户见面了.Frankf ...

  9. Openjudge-计算概论(A)-谁考了第k名

    描述: 在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩. 输入第一行有两个整数,分别是学生的人数n(1≤n≤100),和求第k名学生的k(1≤k≤n). ...

  10. Linux下搭建ntp时间同步服务器

    1.ntpd软件安装(略过) 2.修改ntp.conf配置文件 vi /etc/ntp.conf 第一种配置:允许任何IP的客户机都可以进行时间同步将“restrict default kod nom ...