lua 简介
LuatOS是一款针对嵌入式的脚本运行框架,可以极大提升开发效率。
使用Lua 5.3作为主要语言,针对资源较少的嵌入式环境进行了优化,极大提升了运行效率。
Powerful embedded Lua Engine for IoT devices, with many components and low memory requirements (16K RAM, 128K Flash) 参考手册
lua基本语法学习
在lua语法中变量有:nil、boolean、number、string、userdata、function、thread、table
变量类型基本上从命名方式就能判断一二,需要注意的是
1.在lua中0,不代表false。nil代表fale。
2.table表中,下标初始值是1,而不是0.
3.function 函数也可以作为一个变量进行传递 ,比如在table中 table1= {function(a,b) return a+b end}
以下学习代码,可以使用lua模拟器运行
PROJECT="全名名称"
VERSION="0.0.1"
-- 引入依赖
sys=require"sys"
-- 输出控制台内容
print("hello lua")
--赋值
a=1
b=2
print("赋值操作 ",a,b)
--多重赋值
c,d=3,4
print("多重赋值",c,d)
-- sys.timerLoopStart(print, 1000, "test")
--nil
--print(x)
-- number 类型 ,lua只有number一种数字 类型,包含了浮点,整数等等
number1=1
number2=0x11
number3=2e3
print("整数",number1)
print("十六进制",number2)
print("科学计数法",number3)
print("次方",2^3)
print("移动数",2<<3)
-- 字符串
str1="字符串的创建"
str2='字符串创建单引号'
str3="字符串 \n 换行转义"
str4=[[多行文本
原封不动
输出
]]
str5="拼接".."字符"
str6="数字转换为字符串"..tostring(number1)
-- number转换为字符串:转换失败的值为 nil
str7=101
number4=tonumber(str7)
number5=#"获取字符串长度使用#"
print(str,str2,str,str5,str6,number4,str8)
print(str4)
-- 函数
function fun01(a,b)
print("我是加法",a+b)
end
function fun02(a,b)
result=a-b
print("我是减法",result)
return result
end
fun01(1,2)
result=fun02(2,1)
print("函数的返回值",result)
-- 函数也可以返回多个值
function fun03(a,b)
print("函数同时执行加法和减法")
return a+b,a-b
end
local out1,out2= fun03(2,2)
print(out1,out2)
-- table:数字下标,字符串下标
-- 1.数字下标方式的数组
local arr1={1,"元素可以为字符串",{"可以是另一个数组"},fun01}
print("获取数组的值 下标是从1 开始的:",arr1[3][1])
arr1[5]="在制定位置修改或者新增一个值"
print(arr1[5])
table.insert(arr1, "在尾部新增的值")
print("新增一个值:",arr1[6])
table.insert(arr1, 2,"在指定位置新增的值")
print(arr1[2])
tableRemoveObj=table.remove(arr1,2)
print("移除指定位置的元素",tableRemoveObj)
print("统计一个table中有多少个元素",#arr1)
-- 2.字符串下标方式的table数组【类似于java的map】
arr2={
a=1,
b="2",
c=fun03,
["123"]=123
}
print("下标为字符串的table输出值:",arr2.a)
print("使用table中的函数",arr2["c"](1,2))
print("读取table中字符串角标的值",arr2["123"])
-- 为数组赋值
arr2["1234"]="为角标1234数组赋值"
print("为数组赋值",arr2["1234"])
-- 全局表G:所有的全局变量的偶在G中,包含所有自己定义的和系统的函数,比如table,table.inster 方法都是
print("打印全局变量G",_G)
testG="测试全局变量"
print(_G["testG"])
print(_G["table"],_G["table"]["insert"])
-- 布尔类型:注意点不等符号 ~=
boolean1=true
boolean2=false
print(boolean1,boolean2)
print(2>1,1<2,1==2,1>=2,1<=2,1~=2)
print(2>1 and 1<2)
print("与或非",1 and false,true or false,not false)
print("lua中只有false和nil 代表 假,其他的值包括0都为true",false,true and nil)
print("与或非不只是能返回true和false,可以返回其他值,可以使用and or实现短路求值"
,1>20 and "1<20" or "1>20")
-- if判断语句 if then end
print("if判断语句:使用方式 if 条件 then end ")
if(nil) then
print("0在lua中 是真")
elseif 1>10
then
print("条件 elseif ")
else
print("条件else")
end
-- 循环操作
print("for循环: i初始值,结束值,步长")
for i=1,10,1 do
print(i)
if(i==3) then break end
end
print("倒叙循环")
for i=3,1,-1 do
print(i)
end
print("while 循环")
local w = 10
while w>5 do
print(w)
-- lua不支持--,++等操作
w=w-1
end
-- 字符串补充
print("使用string.char 可以将ascii码转换为字符串")
local str9=string.char(0x30,0x31,0x32,0x33)
print(str9)
print("使用string.byte可以取出字符串中的某一个")
local byte1=string.byte(str9,2)
print(byte1,string.char(byte1))
-- 迭代器
print("lua迭代可以 使用for、 for iparis、for pairs")
local table2={1,2,3,4,5}
sys.run()