1. print("hello lua")

lua官网

在线运行代码

数据类型

数据类型 描述
number 数字,可当作double,5/2 == 2.5
string 字符串
nil 空值,变量未赋值前都是nil,给变量赋值nil相当于释放变量
boolean 布尔值,true和false
table hash表,可以当成数组用,key和val可以是任何数据类型
function 函数,数据类型一种,可以赋值给变量或作为参数
userdata 自定义数据,用于扩展,可以理解成void *,无法直接修改

字符串定义

三种字符串定义方式

  1. text1 = "最普通的字符串"
  2. text2 = '和"一样'
  3. text3 = [[
  4. 长字符串定义,忽略任何转义,最前面的换行,会被忽略
  5. ]]
  6. text4 = [===[
  7. 长字符串定义,忽略任何转义,加=号为了能在字符串里写 a[b[1]],=数量不限
  8. ]===]

关键字

  1. and break do else elseif end false for function if in
  2. local nil not or repeat return then true until while

关键字不能用用作变量名。特别的:a.end = 1出错,但是可以用a["end"] = 1

注释

  1. -- 单行注释
  2. --[[
  3. 多行注释,-和[之前不能有空格
  4. ]]

数字运算

  • + - * / 基本的加减乘除,注意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 : false
  • and 与运算,a and b相当于a ? b : a,如果a为假值(nil或者false),返回a,否则返回b
  • or或运算,a or b相当于a ? a : b

注意:

  • andor的返回值不是bool类型的,而是参与运算的值的其中一个。
  • nilfalse为假值,其他都是真值。也就是说,空串""、数字0和空表{}都是真值。

变量

全局变量不需要声明,任何时候a = 10都是有效的,在a被赋值前,取a的值返回nil

局部变量声明使用local关键字,支持块作用域,支持一次声明多个。

  1. local a,b = 1,2
  2. if a then
  3. local a,b = 10,20
  4. print(a,b) -- 输出10 20
  5. end
  6. print(a,b) -- 输出1 2

赋值语句

lua的=表达式比较特殊,支持一次赋值多个,多余的忽略,不够的补nil。

  1. a, b = 1,2,3 -- 3忽略
  2. c, d = 4 -- d是nil

交换x和y的值可以写成x,y = y,x,十分方便。

条件语句

三个基本结构。

  1. if x then
  2. print("if语句,如果x为真,输出这句话")
  3. end
  1. if x then
  2. print("if + else语句")
  3. else
  4. print("如果x为假,输出这句话")
  5. end
  1. if x then
  2. print("if + elseif语句")
  3. elseif y then
  4. print("x为假,y为真,才输出这句话")
  5. end

for循环

例子:

  1. for i = 1,3 do
  2. print(i)
  3. end

输出 1,2,3

可以指定步长

  1. for i = 1,3,2 do
  2. print(i)
  3. end

输出 1,3

补充:还有种for in循环在table使用小节里介绍。

while循环

条件成立继续循环,例子:

  1. local i = 1
  2. while i <= 3 do
  3. print(i)
  4. i = i+1
  5. end

repeat循环(不常用)

条件成立退出循环,例子:

  1. local i = 1
  2. repeat
  3. print(i)
  4. i = i + 1
  5. until i > 3

break语句

可以用break退出上述三种循环。

注意:

  • break需要是代码块的最后一个语句。
  • 没有continue语句
  1. while true do
  2. break --错误,后面还有代码
  3. local i
  4. end
  5. while true do
  6. do break end -- 正确.do XXX end 是一个的代码块,break 确实放在了这段代码的最后面
  7. local i
  8. end

table

table就是个hash表,key(索引)是nil以外的任何值,value(值)可以是任何值。

  1. t = {1,2} -- 省略索引,索引从数字1开始,相当于 t = {}; t[1] = 1; t[2] = 2;
  2. t = {x = 10, y = 20} -- 字符常量索引,相当于 t = {["x"] = 10, ["y"] = 20}
  3. -- 混合索引,这时最好不要省略索引,数字索引可能混乱
  4. t = {
  5. 1, -- t[1] == 1
  6. x = 10, -- t.x == 10
  7. ["y"] = 20, -- t.y == 20
  8. [2] = 2, -- t[2] == 2 最后的这个,可以删掉
  9. }
  10. -- 多维数组
  11. t = {
  12. hp = 10,
  13. pos = {100,200},
  14. }

注意:

  • 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

  1. t = {nil,nil,1}
  2. print(#t) -- 3
  3. t[3] = nil
  4. print(#t) -- 0

所以:table当成数组用时,最好紧凑数组,索引是1..n,且中间没有值为nil。

2. 三种方式遍历table。

  1. t = {1,2,3}
  2. for i = 1,#t do
  3. print(i .. " : " .. t[i]) -- 1:1 2:2 3:3
  4. end
  5. for i,v in ipairs(t) do
  6. print(i .. " : " .. v) -- 和上面一样的功能
  7. end
  8. for i,v in pairs(t) do
  9. print(i .. " : ".. v) -- 遍历table所有元素,如果table是紧凑的数组,则和上面一样。
  10. end

这儿的for in是另外for循环。

3. 常用的table数组插入删除

  1. t = {1,2,3}
  2. table.insert(t,4) -- 在结尾追加4,变为{1,2,3,4}
  3. table.remove(t) -- 移除结尾元素,变成{1,2,3}
  4. table.remove(t,2) -- 移除index为2的元素,变成{1,3},会移动后边的元素

4. 排序

  1. t = {1,3,2}
  2. table.sort(t) -- 1,2,3
  3. table.sort(t,function(a,b) return a > b end) -- 3,2,1

函数

两种函数声明形式

  1. function func(a,b)
  2. -- 先定义func变量,再定义函数,可以在这儿使用func递归调用
  3. end
  1. func = function(a,b)
  2. -- 先定义了匿名函数,再赋值给变量func,这儿不能使用func递归调用
  3. end

都是声明一个名字叫func,参数是a,b的函数。

参数不需要说明类型,返回值不需要说明。

函数可以返回任何个数的数据,使用return返回,returnbreak一样,必须在代码块的最后面。

函数参数可以接受任意多个,使用...来接受

  1. function generate()
  2. return 1,2,3
  3. end
  4. function MyPrint(...)
  5. print("my print:",...)
  6. end
  7. MyPrint(generate()) -- my print: 1 2 3

lua入门的更多相关文章

  1. lua入门demo(HelloWorld+redis读取)

    1. lua入门demo 1.1. 入门之Hello World!! 由于我习惯用docker安装各种软件,这次的lua脚本也是运行在docker容器上 openresty是nginx+lua的各种模 ...

  2. Openresty最佳案例 | 第2篇:Lua入门

    转载请标明出处: http://blog.csdn.net/forezp/article/details/78616622 本文出自方志朋的博客 什么是lua Lua 是一种轻量小巧的脚本语言,用标准 ...

  3. Lua入门记录

    学习资料 Lua入门和Lua高阶章节 Lua中文文档 阅读笔记,只是记录了知识点和一些注意点,详细的看上面提供的学习资料链接 Lua 基础数据类型 nil(空) boolean(布尔) Lua 中 n ...

  4. [置顶] 轻量级语言Lua入门

    作为一个脚本爱好者,而且是脚本(Perl)起家的我,一有空就喜欢学习下这些脚本语言.据说魔兽世界.愤怒小鸟都用到了它,所以今天研究下Lua这个叫法有点奇特的脚本 [转载请注明出处:http://blo ...

  5. OpenResty(nginx+lua) 入门

    OpenResty 官网:http://openresty.org/ OpenResty 是一个nginx和它的各种三方模块的一个打包而成的软件平台.最重要的一点是它将lua/luajit打包了进来, ...

  6. lua 入门学习

    -- 1.Hello world print( "--------------1--------------") print("Hello world"); - ...

  7. [Lua]入门教程

    什么是Lua Lua 是一个小巧的脚本语言.是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Rober ...

  8. Lua入门基础

    什么是Lua Lua 是一个小巧的脚本语言.是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Rober ...

  9. [Lua]Lua入门教程

    什么是Lua Lua 是一个小巧的脚本语言.是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Rober ...

随机推荐

  1. Lost connection to MySQL server at 'reading initial communication packet' 错误解决

    Lost connection to MySQL server at 'reading initial communication packet' 错误解决 上次解决了这个问题,今天又碰到,突然失忆, ...

  2. LeetCode中有技巧的题需要面试前记得的

    https://leetcode.com/problems/insert-interval/ http://www.cnblogs.com/yxzfscg/p/4459173.html https:/ ...

  3. NavieBayes中的多项式与伯努力模型

    1文本分类过程 例如文档:Good good study Day day up可以用一个文本特征向量来表示,x=(Good, good, study, Day, day , up).在文本分类中,假设 ...

  4. http请求返回响应码的意思

    HTTP 状态响应码 意思详解/大全 HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码.它由 RFC 2616 规范定义的,并得到RFC 2518. ...

  5. Java中的DeskTop类使用介绍

    在Jdk1.6以后新增加了一个类--DeskTop,在JDK中它的解释是这样的: The Desktop class allows a Java application to launch assoc ...

  6. Win10遇上Kindle就蓝屏

    在使用 Kindle 连接 Win10 时会出现蓝屏现象,现在,微软承认 Windows 10 插入 Kindle 导致蓝屏问题,并表示目前正着手制作补丁.微软表示:“我们承认确实存在当Kindle ...

  7. 《C++ primer》--第7章

    删除指针后,该指针就变成了悬垂指针.悬垂指针指向曾经存放对象的内存,但该对象已经不再存在了. 习题7.8 举一个例子说明什么时候应该将形参定义为引用类型.再举一个例子说明什么时候不应该将形参定义为引用 ...

  8. 如何从ST网站找到对应的固件库

    ST官方网站改版后,基本上很难搜索到固件库的地址,找了半天才找到固件库的下载地址,通过此方法可以找到其他需要的资源,故记下来方便大家. 下载的网站地址为: Home>Tools and Soft ...

  9. python 入门实践之网页数据抓取

    这个不错.正好入门学习使用. 1.其中用到 feedparser: 技巧:使用 Universal Feed Parser 驾驭 RSS http://www.ibm.com/developerwor ...

  10. 使用jQuery Mobile实现通讯录

    jQuery Mobile 通讯录 拨打电话作者:方倍工作室 地址: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional/ ...