NodeMcu开发(二)--lua脚本语言快速入门

NodeMcu是已lua为脚本语言开发的, 是不是听到又要学语言了, 就抓狂了???? 不是的, 其实我感觉只要学好了一门语言, 其他语言就是类似的, 触类旁通, 经过一个小时的学习后, 发现lua挺像python的, 少说废话, 来点实际的

lua语言详细教程参考网站: 菜鸟教程 网址:http://www.runoob.com/lua/lua-tutorial.html

lun快熟入门教程, 也是我看的教程, 是简书上的:https://www.jianshu.com/p/5927eae240ba

 

做一回大自然的搬运工:

在lua中需要注意

不要在结尾使用                 ;
数组的第一个元素下标       是1不是0
----------------------------------------------------------------------
不等于                       ~=
逻辑与                      and
逻辑或                       or
逻辑非                      not
---------------------------------------------------------------------
注释用                       --
空值                        nil
连字符                       ..
所有代码块需要结束标志        end
--------------------------------------------------------------------
不能使用              i++  i--  ++i   --i

输出语句

直接用print()输出

示例:
print("hello world!")
----输出hello world!
print("5+3="..(5+3))
----输出5+3=8

变量定义

在lua中,变量的声明不需要声明变量的类型,如下

示例:
       i = 6-----声明全局变量    
local  i = 7-----声明局部变量

if语句

--if语句框架如下

if  (布尔表达式)   then 
    --执行语句
end 
--示例:
i=6
if (i<7) then 
    print("yes!")
end 
--输出yes!

if-else

--if-else语句框架如下

if  (布尔表达式)   then 
    --执行语句
else
     --执行语句
end 
--示例:
i=9
if (i<5) then 
    print("yes!")
else
    print("no!")
end 
--输出no!

elseif

--elseif框架如下

if  (布尔表达式)    then 
    --执行语句
elseif (布尔表达式) then 
   --执行语句
end
示例:
i=7
if  (i<5)    then 
    print("i<5")
elseif (i>6) then 
   print("i>6")
end
--输出i>6

while循环

--while循环框架如下

while (布尔表达式) do 
    --执行语句
end
示例:
i=5
while (i>0) do 
    print(i)
    i=i-1
end
--输出
5
4
3
2
1

for循环

--for循环框架如下

for var=exp1,exp2,exp3 do 
     --执行语句
end 
 ---exp1为初始值;exp2为终值;exp3为递增值,省略则默认为1
for i=1,5,1 do 
    print(i)
end
--输出
1
2
3
4
5

function函数

--函数定义框架如下

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

function f(ex1,ex2)
    ex1=ex1+1
    ex2=ex2-1
    return ex1,ex2
end
i,j=f(9,5)
print("i="..i)
print("j="..j)
--输出
i=10
j=4

数组

--数组定义如下

array1 = {}                    --定义一个空数组
array2 = {1,2,3,4,5,6}         --定义一个赋初的值数组
--示例
array = {1,2,3,4,5,6}
for i=1,6,1 do
    print(array[i])
end
--输出
1
2
3
4
5
6

table

--table的定义

table = {}                  --定义一个空table
table.name="kk"             --给table设置一个属性,key为name,value为“kk”
table.name=nil              --删除属性
--示例
table = {}
table.name="xiaoming"
table.age=12
function table.chifan() 
    print("yes ,yes, yes ")
end

table.age=table.age+5
print(table.name)
print(table.age)
table.chifan()

--输出

xiaoming
17
yes ,yes, yes 

字符串

--字符串的定义有三种形式

a1 = 'asdf'--------单引号定义字符串
a2 = "asdf"--------双引号定义字符串
a3 = [[asdf]]-------两个中括号定义字符串
--示例
a1 = 'as\ndf'                      --将\n变成回车
a2 = "as\ndf"                      --将\n变成回车
a3 = [[as\ndf]]                    --不会将\n变成回车
print("a1="..a1)
print("a2="..a2)
print("a3="..a3)
--输出
a1=as
df
a2=as
df
a3=as\ndf

错误处理

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

function fun(x)
    return 10/x
end
ok,y=pcall(fun,0)
if(ok) then
    print("yes")
    print(y)
    print(ok)
else
    print("no")
    print(y)
    print(ok)
end
--输出
no
stdin:-1: divide by zero
false

字符串常用函数

连接字符串..

--示例
s1="asd"
s2="fgh"
s3=s1..s2
print(s3)
--输出
asdfgh

计算字符串长度string.len(str)

--示例
s1="asdfg"
print(string.len(s1))
--输出
5

查找字符串string.find (str, substr, i ,j)

str中查找substr,查找区间为str的第i到第j个之间;找到就返回开始下标和结束下标,找不到返回nil

--示例
s1="asdfg"
i,j=string.find(s1,'df')
print("i="..i)
print("j="..j)
--输出
i=3
j=4

提取字符串string.sub(str,i,j)

提取字符串str中的第i个字符和第j个字符之间的所欲字符,包括ij
如果j取-1则取到最后一个,取-2则取到倒数第二个,以此类推

--示例
s1="asdfghjkl"
print(string.sub(s1,2,6))
--输出
sdfgh

按指定字符分割符串

输入参数,字符和标志,返回数组

--示例
function split( str,reps )
    local resultStrList = {}
    string.gsub(str,'[^'..reps..']+',function ( w )
        table.insert(resultStrList,w)
    end)
    return resultStrList
end
a=[[111,222,333,444]]
print(split(a,',')[1])

 

你可能感兴趣的:(lua)