lua注释

-- 单行注释
--[[ 多行注释 ]]--

lua数据结构

nil          无效值与Java的Null类似,但是在条件表示中是false

boolean      布尔值,ture或者false

number   双精度类型的浮点数

string   字符串 "  "   ,   '   '  ,   [[  ]]

table   类似于java数组,但是比数组更强大

function  由c或者lua编写的函数

thread    协同线程,是协同函数的执行体,即正在执行的协同函数

userdata  一种用户自定义数据,用于表示一种由应用程序或c/c++ 语言库所创建的类型,可以将c和c++的任意数据类型的数据存储到lua变量中调用。

lua标识符

由字母、数字、下划线组成,但不能以数字开头。

lua保留字

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

除此之外lua还定义很多内置全局变量,以下划线后跟全大写字母

lua变量

lua是弱类型语言,无需声明即可拿来用

str="你好"

变量分为全局变量和局部变量,lua中默认的就是全局变量,而局部变量local,只能在声明的语句块中使用。

local x=3

function f(){
y=5;
local z=8
print("x = " ..x);
}
end f();
-- 访问全局变量y, .. 类似于java里面的+
print("y=" ..y);
print("z=" ..z);

结果是:

x=3

y=5

z报错。

动态类型:lua是动态类型语言,变量的类型可以随时改变,无需再声明。

lua运算符

a=10       b=20

+            a+b            30              加法

-             a-b            10               减法

*             a*b            200            乘法

/             5/2             2.5              除法

%            b%a           0                 取余

^              a^2            100             求幂

~              -a             -10               负数

//             5//2           2                 整除                整除运算符(>=lua5.3)

关系运算符:

==(等于) 、  ~=(不等于)、 >  (大于)、<   (小于) 、>= (大于等于) 、<= (小于等于)

逻辑运算符:

and   逻辑与、or  逻辑或  、 not  逻辑非。

其他运算符:

lua语言中的连接运算符与计算表或字符串长度的运算符;

..   字符串连接符。                                  a..b,其中a为"Hello" ,b为"World",输出结果为"Hello World"

#   返回字符串或表的长度。                   #"Hello" 返回5

lua函数

lua中的函数的定义是以function开头,后跟函数名与参数列表,以end结尾。其可以没有返回值,也可以一次返回多个值。

固定参函数

function f(a,b)

 print(a,b)

end

print("无实参传递")
f()
print("传递一个实参")
f(10)
print("传递两个实参")
f(10,20)
print("传递三个实参")
f(10,20,30)

结果:

nil   nil

10   nil

10    20

10    20

可变参函数

-- 定义一个普通函数,包含可变参
function f(...)
local a,b,c,d=...
print(a,b,c,d) end

可返回多个值

-- 定义一个普通函数,返回两个值
function f(a,b)
local sum=a+b
local mul=a*b
return sum,mul; end -- 一次接受两个值
m,n=f(3,5)
print(m,n)

函数作为参数

lua的函数中,允许函数作为参数,作为参数的函数,可以是已经定义好的普通函数,也可以是匿名函数。

-- 定义两个普通函数
function sum(a,b)
return a+b
end function mul(a,b) return a*b end -- 定义一个函数,其参数是函数
function f(m,n,fun) local result=fun(m,n)
print(result)
end -- 普通调用
f(3,5,sum);
f(3,5,mul); -- 匿名函数调用
f(3,5,function (a,b)
return a-b;
end )

lua 流程控制语句

if语句

lua提供了if...then用于表示条件判断,其中if的判断条件可以是任意表达式。lua系统将false与nil作为假,将true与非nil作为真,即使是0也是真。

if嵌套语句

lua中提供了专门的关键字elseif来做if嵌套语句。注意,不能使用else与if两个关键字的联用形式,即不能使用else if来嵌套if语句

a=5
if(a>0) then
print("num>0")
else
print("num<0")
end
a=5
if(a>0) then
print("num>0")
elseif num==0 then
print("num=0")
else
print("num<0")
end

lua 循环语句

lua提供了四种循环控制语句:while...do循环,repeat....until循环、数值for循环,以及泛型for循环。同时,lua还提供了break与goto两种循环流程控制语句。

a=3
while a>0 do
print(a)
a=a-1
end
repeat
print(a)
a=a-1
until a<=0
for i=10,50,20  do

      print(i)
end -- 结果:
--[[ 10
30
50
--]] -- 意为i=10, i<=50,i=i+20
-- 20不写的话,默认是1
for i=1,9 do
print(i)
if i==5 then
break
end
end

lua 的table

数组

使用table可以定义一维、二维、多维数组。不过,需要注意,lua中的数组索引是从1开始的,且无需声明数组长度,可以随时增加元素。当然,同一数组元素可以是任意类型。

-- 定义一个一维数组
cities={"北京","上海","广州"}
cities[4]="深圳"
for i=1 4 do
print("cities["..i.."]="..cities[i]) end --开始搞二维数组
-- 声明一个空的数组
arr={}
for i=1, 3 do
-- 声明一个空的数组
arr[i]={}
for j=1, 2 do
arr[i][j]=i*j
end
end for i=1, 3 do
for j=1,2 do
print(arr[i][j])
end
end

map

使用table也可以定义出类似map的key-value数据结构。其可以定义table时直接指定key-value,也可以单独定义key-value。而访问时,一般都是通过table的key直接访问,也可以数组索引方式来访问,此时的key为索引。

-- 定义一个map
emp={name="张三",age=23,depart="销售部"} -- 通过下标方式
emp["gender"]="男" print(emp["name"])
print(emp["gender"]) -- 点号方式操作
print(emp.age) -- map key为表达式
a="xxx"
b=3
c=5 arr={
["emp_"..a]=true,
[b+c]="Hello"
}

lua允许将数组与key-value混合在同一个table中进行定义。key-value不会占用数组的数字索引值。

-- 定义一个数组、map混合结构
emps={
{name="张三",age=23},
{name="李四",age=24},
{name="王五",age=25},
{name="赵六",age=26}
}
for i=1 ,4 do
print(emps[i].name..":" ..emps[i].age)
end

官网:Lua 5.4 Reference Manual - contents

emp={"北京",name="张三",age=23,"上海",depart="销售部","广州","深圳"}
print(table.concat(emp))

结果:北京上海广州深圳

emp={"北京",name="张三",age=23,"上海",depart="销售部","广州","深圳"}
print(table.concat(emp,",",2))

结果:上海,广州,深圳

emp={"北京",name="张三",age=23,"上海",depart="销售部","广州","深圳"}
print(table.concat(emp,",",2,4))

结果:上海,广州

table.unpack()

table.pack()打包成一个table
t=table.pack("apple","banana","peach")

数组如果包含nil就会报错

lua迭代器

ipairs(table):  仅会迭代指定table中的数组元素

pairs(table):   会迭代整个table元素,无论是数组元素,还是key-value。

--遍历emp中的所有数组元素
for i,v in ipairs(emp) do
print(i,v)
end
for k,v in pairs(emp) do
print(k,v)
end

lua模块

--声明一个模块
rectangle ={} --为模块添加一个变量
rectangle.pi=3.14 --为模块添加函数(求周长)
function rectangle.perimeter(a,b)
return (a+b)*2
end
--以匿名函数方式为模块添加一个函数(求面积)
rectangle.area=function(a,b)
return a*b;
end return rectangle

使用模块

require "rectangle"
print(rectangle.pi)
print(rectangle.perimeter(3,5))
print(rectangle.area(3,5))

lua完整学习笔记的更多相关文章

  1. lua本学习笔记功能

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

  2. SpringBoot 完整学习笔记免费分享

    从0到进阶,完全系统性的学习笔记 每次我都会反复拿来观看,因为我们总会有遗漏忘记的地方,但是笔记不会. 希望大家能好好利用它,以下是笔记截图! 以上只是其中的一项部分,这份笔记可以说含金量超高,绝对会 ...

  3. GJM : Lua 语言学习笔记

    Lua笔记 容易与C/C++整合 Lua所提供的机制是C所不善于的:高级语言,动态结构,简洁,易于测试和调试. Lua特有的特征: `1:可扩展性.卓越的扩展性导致了很多人将Lua用作搭建领域语言的工 ...

  4. Mybatis-Plus 实战完整学习笔记(一)------简介

    第一章    简介      1. 什么是MybatisPlus                MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只 ...

  5. LUA table学习笔记

    function printT( ... ) for i,v in ipairs(...) do print(i,v) end end t1={} t2={} t3={} table.insert(t ...

  6. Lua JSONRPC学习笔记

    JSON RPC JSON RPC 为利用json数据格式来执行远程调用方式, 作用同xmlrpc,不过与xmlrpc相比, jsonrpc更加轻量,json更加节省数据量,更加可读性高. 官网网站: ...

  7. Lua 基础 -- 学习笔记

    标签(空格分隔): Lua 1. Lua可以一次性给多个变量赋值 变量比赋值多,多的变量就赋值nil 变量比赋值少,多的赋值舍弃 local a, b, c = 1, 2, 3 print( a, b ...

  8. Allure测试报告完整学习笔记

    目录 简介 安装Allure Allure测试报告的结构 Java TestNG集成Allure Report Python Pytest集成Allure Report 简介 假如你想让测试报告变得漂 ...

  9. Mybatis-Plus 实战完整学习笔记(十一)------条件构造器删除,修改,conditon

    1.修改功能--其他过滤方式跟select一样 /** * 修改条件构造器 * @throws SQLException */ @Test public void selectUpdate() thr ...

  10. Mybatis-Plus 实战完整学习笔记(十)------条件构造器核心用法大全(下)

    31.升序orderByAsc 31.升序orderByAsc List<Employee> employeeList = employeeMapper.selectList(new Qu ...

随机推荐

  1. 《高级程序员 面试攻略 》rabitmq rcoketmq kafka的区别 和应用场景

    RabbitMQ.RocketMQ 和 Kafka 都是流行的消息中间件系统,用于实现分布式应用程序之间的异步通信.虽然它们都有类似的目标,但在设计和应用场景上存在一些区别. 1. RabbitMQ( ...

  2. mysql8关闭binlog并清空Binlog

    编辑my.ini或者my.cnf文件 清空binlog信息 #查看现存的binlog文件列表 show master logs; #重置清空binlog文件 reset master; #重置清空后 ...

  3. 3天上手Ascend C编程丨通过Ascend C编程范式实现一个算子实例

    本文分享自华为云社区<3天上手Ascend C编程 | Day2 通过Ascend C编程范式实现一个算子实例>,作者:昇腾CANN . 一.Ascend C编程范式 Ascend C编程 ...

  4. 文心一言 VS 讯飞星火 VS chatgpt (92)-- 算法导论8.3 5题

    五.用go语言,在本节给出的第一个卡片排序算法中,为排序 d 位十进制数,在最坏情况下需要多少轮排序?在最坏情况下,操作员需要记录多少堆卡片? 文心一言: 你提到的第一个卡片排序算法可能是指的基数排序 ...

  5. 为什么 Python 代码在函数中运行得更快?

    哈喽大家好,我是咸鱼 当谈到编程效率和性能优化时,Python 常常被调侃为"慢如蜗牛" 有趣的是,Python 代码在函数中运行往往比在全局范围内运行要快得多 小伙伴们可能会有这 ...

  6. selenium库浅析

    selenium库浅析 基于4.3 pip install selenium安装好后,在sitepackages下 2个主要的目录,common和webdriver 1- common 该目录一共就一 ...

  7. C51单片机开发

    C51单片机开发笔记 定时器 C51中的定时器和计数器是同一个硬件电路支持的,通过寄存器配置不同,就可以将他当做定时器 或者计数器使用. 确切的说,定时器和计数器区别是致使他们背后的计数存储器加1的信 ...

  8. GO语言基础之基本运算符

    GO语言基础之基本运算符 目录 GO语言基础之基本运算符 一.运算符 内置运算符: 二.算术运算符 三.关系运算符 四.逻辑运算符 五.位运算符 六.赋值运算符 一.运算符 作用:运算符用于在程序运行 ...

  9. idea修改默认maven配置

    idea修改默认maven配置 方法一 (不推荐) 打开project.default.xml文件,在其中加入如下几行配置. 代码如下 保存修改之后新建一个maven项目查看效果 方法二 新增Proj ...

  10. Vue项目打包为桌面应用

    vue项目首先使用 npm run build 打包为dist文件后,进入dist目录得到如下文件:就是打包后的html+css+js+static 新建一个deskapp文件夹,里面在新建一个App ...