lua入门
print("hello lua")
数据类型
| 数据类型 | 描述 |
|---|---|
| number | 数字,可当作double,5/2 == 2.5 |
| string | 字符串 |
| nil | 空值,变量未赋值前都是nil,给变量赋值nil相当于释放变量 |
| boolean | 布尔值,true和false |
| table | hash表,可以当成数组用,key和val可以是任何数据类型 |
| function | 函数,数据类型一种,可以赋值给变量或作为参数 |
| userdata | 自定义数据,用于扩展,可以理解成void *,无法直接修改 |
字符串定义
三种字符串定义方式
text1 = "最普通的字符串"text2 = '和"一样'text3 = [[长字符串定义,忽略任何转义,最前面的换行,会被忽略]]text4 = [===[长字符串定义,忽略任何转义,加=号为了能在字符串里写 a[b[1]],=数量不限]===]
关键字
and break do else elseif end false for function if inlocal nil not or repeat return then true until while
关键字不能用用作变量名。特别的:a.end = 1出错,但是可以用a["end"] = 1
注释
-- 单行注释--[[多行注释,-和[之前不能有空格]]
数字运算
+ - * /基本的加减乘除,注意5/2 == 2.5%取余,a%b= a−b∗⌊a/b⌋" role="presentation" style="position: relative;">a−b∗⌊a/b⌋a−b∗⌊a/b⌋,可用于浮点数1%-1.5 == -0.5^幂乘,a^i= ai" role="presentation" style="position: relative;">aiai
字符串运算
..字符串连接符,print("hello".." ".."world")输出hello world
逻辑运算
== ~=相等比较,任意类型都可以,注意2 ~= "2"> < >= <=大小比较,不能数字字符串混用,2 > "3"会报错not非运算,not not a相当于a ? true : falseand与运算,a and b相当于a ? b : a,如果a为假值(nil或者false),返回a,否则返回bor或运算,a or b相当于a ? a : b
注意:
and和or的返回值不是bool类型的,而是参与运算的值的其中一个。nil和false为假值,其他都是真值。也就是说,空串""、数字0和空表{}都是真值。
变量
全局变量不需要声明,任何时候a = 10都是有效的,在a被赋值前,取a的值返回nil。
局部变量声明使用local关键字,支持块作用域,支持一次声明多个。
local a,b = 1,2if a thenlocal a,b = 10,20print(a,b) -- 输出10 20endprint(a,b) -- 输出1 2
赋值语句
lua的=表达式比较特殊,支持一次赋值多个,多余的忽略,不够的补nil。
a, b = 1,2,3 -- 3忽略c, d = 4 -- d是nil
交换x和y的值可以写成x,y = y,x,十分方便。
条件语句
三个基本结构。
if x thenprint("if语句,如果x为真,输出这句话")end
if x thenprint("if + else语句")elseprint("如果x为假,输出这句话")end
if x thenprint("if + elseif语句")elseif y thenprint("x为假,y为真,才输出这句话")end
for循环
例子:
for i = 1,3 doprint(i)end
输出 1,2,3
可以指定步长
for i = 1,3,2 doprint(i)end
输出 1,3
补充:还有种for in循环在table使用小节里介绍。
while循环
条件成立继续循环,例子:
local i = 1while i <= 3 doprint(i)i = i+1end
repeat循环(不常用)
条件成立退出循环,例子:
local i = 1repeatprint(i)i = i + 1until i > 3
break语句
可以用break退出上述三种循环。
注意:
- break需要是代码块的最后一个语句。
- 没有continue语句。
while true dobreak --错误,后面还有代码local iendwhile true dodo break end -- 正确.do XXX end 是一个的代码块,break 确实放在了这段代码的最后面local iend
table
table就是个hash表,key(索引)是nil以外的任何值,value(值)可以是任何值。
t = {1,2} -- 省略索引,索引从数字1开始,相当于 t = {}; t[1] = 1; t[2] = 2;t = {x = 10, y = 20} -- 字符常量索引,相当于 t = {["x"] = 10, ["y"] = 20}-- 混合索引,这时最好不要省略索引,数字索引可能混乱t = {1, -- t[1] == 1x = 10, -- t.x == 10["y"] = 20, -- t.y == 20[2] = 2, -- t[2] == 2 最后的这个,可以删掉}-- 多维数组t = {hp = 10,pos = {100,200},}
注意:
- table的key(索引)可以是除nil以外的任何值,
t[nil] = 1报错 - table的value(值)可以是任何值,特别的:
t[1] = nil的效果是删除t[1]的值 t["x"]可以简写成t.x,x不能是关键字,t.end = 1报错- table可以当成数组使用,数字索引从1开始
- **不要数组和hash混用*
table的简单使用
1. 获取table数组的长度。
lua提供了#运算符,注意:如果table的key不是1..n,结果可能出错,因为这个返回的是一个n,满足t[n] ~= nil and t[n+1] == nil。
t = {nil,nil,1}print(#t) -- 3t[3] = nilprint(#t) -- 0
所以:table当成数组用时,最好紧凑数组,索引是1..n,且中间没有值为nil。
2. 三种方式遍历table。
t = {1,2,3}for i = 1,#t doprint(i .. " : " .. t[i]) -- 1:1 2:2 3:3endfor i,v in ipairs(t) doprint(i .. " : " .. v) -- 和上面一样的功能endfor i,v in pairs(t) doprint(i .. " : ".. v) -- 遍历table所有元素,如果table是紧凑的数组,则和上面一样。end
这儿的for in是另外for循环。
3. 常用的table数组插入删除
t = {1,2,3}table.insert(t,4) -- 在结尾追加4,变为{1,2,3,4}table.remove(t) -- 移除结尾元素,变成{1,2,3}table.remove(t,2) -- 移除index为2的元素,变成{1,3},会移动后边的元素
4. 排序
t = {1,3,2}table.sort(t) -- 1,2,3table.sort(t,function(a,b) return a > b end) -- 3,2,1
函数
两种函数声明形式
function func(a,b)-- 先定义func变量,再定义函数,可以在这儿使用func递归调用end
func = function(a,b)-- 先定义了匿名函数,再赋值给变量func,这儿不能使用func递归调用end
都是声明一个名字叫func,参数是a,b的函数。
参数不需要说明类型,返回值不需要说明。
函数可以返回任何个数的数据,使用return返回,return和break一样,必须在代码块的最后面。
函数参数可以接受任意多个,使用...来接受
function generate()return 1,2,3endfunction MyPrint(...)print("my print:",...)endMyPrint(generate()) -- my print: 1 2 3
lua入门的更多相关文章
- lua入门demo(HelloWorld+redis读取)
1. lua入门demo 1.1. 入门之Hello World!! 由于我习惯用docker安装各种软件,这次的lua脚本也是运行在docker容器上 openresty是nginx+lua的各种模 ...
- Openresty最佳案例 | 第2篇:Lua入门
转载请标明出处: http://blog.csdn.net/forezp/article/details/78616622 本文出自方志朋的博客 什么是lua Lua 是一种轻量小巧的脚本语言,用标准 ...
- Lua入门记录
学习资料 Lua入门和Lua高阶章节 Lua中文文档 阅读笔记,只是记录了知识点和一些注意点,详细的看上面提供的学习资料链接 Lua 基础数据类型 nil(空) boolean(布尔) Lua 中 n ...
- [置顶] 轻量级语言Lua入门
作为一个脚本爱好者,而且是脚本(Perl)起家的我,一有空就喜欢学习下这些脚本语言.据说魔兽世界.愤怒小鸟都用到了它,所以今天研究下Lua这个叫法有点奇特的脚本 [转载请注明出处:http://blo ...
- OpenResty(nginx+lua) 入门
OpenResty 官网:http://openresty.org/ OpenResty 是一个nginx和它的各种三方模块的一个打包而成的软件平台.最重要的一点是它将lua/luajit打包了进来, ...
- lua 入门学习
-- 1.Hello world print( "--------------1--------------") print("Hello world"); - ...
- [Lua]入门教程
什么是Lua Lua 是一个小巧的脚本语言.是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Rober ...
- Lua入门基础
什么是Lua Lua 是一个小巧的脚本语言.是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Rober ...
- [Lua]Lua入门教程
什么是Lua Lua 是一个小巧的脚本语言.是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Rober ...
随机推荐
- hdu 4602 Partition(快速幂)
推公式+快速幂 公式有很多形式,可以写矩阵 1.前n-1项和的两倍+2的(n-2)次方,这个写不出啥 2.递推式:f(n)=2*f(n-1)+2的(n-3)次方 3.公式:2的(n-k-2)次方*(n ...
- jQuery的datatable怎么才能给某一列添加超链接?
aocolumeDef.这个里面去定义.return返回的字符串会代替原来cell里面的内容 e.g: datatable=$('#dt_basic').dataTable({ "bAuto ...
- 《C++ Primer 4th》读书笔记 第4章-数组和指针
原创文章,转载请注明出处: http://www.cnblogs.com/DayByDay/p/3911573.html
- (3)Spring定时任务的几种实现
Spring定时任务的几种实现 近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将 ...
- site
http://blog.csdn.net/zgmzyr/article/details/7657126
- (原创)LAMP教程3-下载centos6.4
(原创)LAMP教程3-下载centos6.4 今天我要给大家讲的是安装CentOS-6.4-x86_64,是的没有错,就是64位的,因为我的机子是4G的内存,安装64位的centos是绰绰有余啊,但 ...
- acdream 1044
题意:有你一个草坪,草的初始高度都是100,让你用割草机割,割草机只能横着或竖着割,每次割的高度一定,问你能不能割出给定的草坪出来. 考虑任意一个草被割要么是横着要么竖着,所以任意一个草必然是它所在行 ...
- Selenium IDE测试创建
Selenium IDE 测试创建 涉及使用IDE Selenium创建测试,如下面的步骤 记录和测试添加命令 保存测试记录 保存测试程序 执行测试记录 在测试中记录和添加命令 为了演示目的,我们将利 ...
- MATLAB常用数据类型的转换
一直以来,在使用MATLAB进行运算的过程中,经常会用到对图像的各种处理,因此需要对图像进行数据转换,因此对经常用到的转换进行整理,方便查看. 1.uint8转化为double用来方便图像的运算: d ...
- HTML 5的消息通知机制
译文来源:http://www.ido321.com/1130.html 原文:HTML 5 Notification 译文:HTML 5 的消息通知机制 译者:dwqs HTML 5 已经被应用到W ...