esp8266学习笔记②:LUA脚本语言的学习

版权声明:本博客内容仅供学习使用 https://blog.csdn.net/weixin_42573320/article/details/86299968

一、LUA语言

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

二、Lua 特性

1.轻量级: 它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。
2.可扩展: Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。

三、LUA的基本语法

相较于c语言来说在,lua在每行程序末尾不带 “;”
而且不能使用i++ , i--, ++i, --i
单行注释用--而不是/
多行注释用--[[ ]]--而不是/... .../

与——and
或——or
非——not
不等于—— ~=

关键词
以下列出了 Lua 的保留关键字。保留关键字不能作为常量或变量或其他用户自定义标示符:

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

全局变量
默认情况下,定义的就是全局变量

例:a=1

局部变量
在变量前加 local

例:local a=1

数据类型

nil(空)——这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
boolean(布尔)——包含两个值:false和true。
number(数字)——表示双精度类型的实浮点数
string(字符串)——字符串由一对双引号或单引号来表示
function(函数)——由 C 或 Lua 编写的函数
userdata(自定义类型)——表示任意存储在变量中的C数据结构
thread(线程)——表示执行的独立线路,用于执行协同程序
table(数组)——Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字或者是字符串。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。

if语句

if  (布尔表达式)	then
	--执行语句
end

示例:

a=7
if  a<8 then
	print("a小于8")
end

输出结果:a小于8

if…else…语句

if (布尔表达式) then
   --[ 布尔表达式为 true 时执行该语句块 --]
else
   --[ 布尔表达式为 false 时执行该语句块 --]
end

示例:

a = 100 --定义变量
if( a < 20 ) then
   --[ if 条件为 true 时执行该语句块 --]
   print("a 小于 20" )
else
   --[ if 条件为 false 时执行该语句块 --]
   print("a 大于 20" )
end
print("a 的值为 :", a)

输出结果:a大于20
	     a的值为:  100

if嵌套

if( 布尔表达式 1) then
   --[ 布尔表达式 1 为 true 时执行该语句块 --]
	elseif(布尔表达式 2) then
      --[ 布尔表达式 2 为 true 时执行该语句块 --]
   end
end

示例:

a = 100
b = 200
if( a == 100 ) then
   elseif( b == 200 ) then
      print("a 的值为 100 b 的值为 200" )
   end
end
print("a 的值为 :", a )
print("b 的值为 :", b )

输出结果:
a的值为100b的值为200
a的值为:100
b的值为:200

while循环

while(条件判断)   do
   循环体语句
end
条件判断结果为布尔表达式。即 fasle 或 true

示例:

a=10
while( a < 20 )
do
   print("a 的值为:", a)
   a = a+1
end

输出结果:
a 的值为:    10
a 的值为:    11
a 的值为:    12
a 的值为:    13
a 的值为:    14
a 的值为:    15
a 的值为:    16
a 的值为:    17
a 的值为:    18
a 的值为:    19

for循环

for var=exp1,exp2,exp3 do 
     --执行语句
end 
 ---exp1为初始值;exp2为终值;exp3为递增值,省略则默认为1

示例

for i=1,5,1 do
	print("a的值为",i)
end

输出结果:
a的值为:1
a的值为:2
a的值为:3
a的值为:4
a的值为:5

函数function

function 函数名(参数1,参数2,参数3)
    --执行语句
    return 返回值1,返回值2,返回值3
end

示例

function  max(a,b)
		if(a>b) then
			result = a
		else 
			result = b
		end
	return result
end

print("最大值为",max(5,8))

输出结果:
最大值为:8

数组定义

array1={}		--定义一个空数组
array2={1,2,3,4,5,6}	--定义一个带值的数组
--数组的使用
--一维数组
a={1,2,3,4,5,6}
print(a[3])

输出结果:3
--多维数组
array={}
for i=1,2 then
	for j=1,2 then
		array[i][j]=i*j
	end
end
print(array[1][2])

输出结果:2
备注:上面得到的是一个二维数组array[2][2]={1,2;2,4}

错误处理
错误分为语法错误运行错误
语法错误运行错误更好查找

--语法错误示例
a == 2

执行结果:

lua: test.lua:2: syntax error near '=='

运行错误是程序可以正常执行,但是会输出报错信息。如下实例由于参数输入错误,程序执行时报错:

function add(a,b)
   return a+b
end
add(10)

当我们编译运行以下代码时,编译是可以成功的,但在运行的时候会产生如下错误:

lua: test2.lua:2: attempt to perform arithmetic on local 'b' (a nil value)
stack traceback:
    test2.lua:2: in function 'add'
    test2.lua:5: in main chunk
    [C]: ?

以下报错信息是由于程序缺少 b 参数引起的。

错误查找
pcall(function,x1,x2,x3)
第一个参数为一个函数的名字,注意没有(),后面的参数为需要给函数传递的参数;
函数的第一个返回值表示是否执行成功,成功为ture,不成功为false,
若所传递的函数也有返回值,则在pcall返回的第二个值之后接收。

字符串
字符串或串(String)是由数字、字母、下划线组成的一串字符。
Lua 语言中字符串可以使用以下三种方式来表示:

单引号间的一串字符。
双引号间的一串字符。
[[和]]间的一串字符。

以上三种方式的字符串实例如下:

string1 = "Lua"
print("\"字符串 1 是\"",string1)
string2 = 'LUa'
print("字符串 2 是",string2)
string3 = [["LUA 教程"]]
print("字符串 3 是",string3)

以上代码执行输出结果为:

"字符串 1 是"    Lua
字符串 2 是    LUa
字符串 3 是    "LUA 教程"

操作字符串
string.upper(字符串)——字符串全部转为大写字母
string.lower(字符串)——字符串全部转为小写字母
示例:

s="qaZWSxedc"
t1=string.upper(s)
t2=string.lower(s)
print(t1)
print(t2)

输出结果:
QAZWSXEDC
qazwsxedc

string.gsub(要替换的字符串,被替换的字符,要替换的字符,替换次数)——在字符串中替换
示例:

string.gsub("aaaa","a","z",3);
zzza    3

string.find (字符串, 查找的字符, [init, [end]])——在一个指定的目标字符串中搜索指定的内容(第三个参数为索引),返回其具体位置。不存在则返回 nil。
示例1:

string.find("Hello Lua user", "Lua", 1) 
7    9

示例2:

s1="asdfg"
i,j=string.find(s1,'df')
print("i="..i)
print("j="..j)

输出结果:
i=3
j=4

string.reverse(arg)——字符串反转
示例:

string.reverse("Lua")
auL

string.char(arg)string.byte(arg[,int])——char 将整型数字转成字符并连接, byte 转换字符为整数值(可以指定某个字符,默认第一个字符)。
示例:

string.char(97,98,99,100)
abcd
string.byte("ABCD",4)
68
string.byte("ABCD")
65

string.len(arg)——计算字符串长度
示例:

string.len("abc")
3

..——链接两个字符串
示例:

print("abc".."def")
abcdef

string.sub(str,i,j)——提取字符串,提取str中的第i到第j个字符
示例:

s1="abcdefghijk"
t=string.sub(s1,3,7)
print(“提取的字符为:”..t)
输出结果:
提取的字符为:cdefg

猜你喜欢

转载自blog.csdn.net/weixin_42573320/article/details/86299968