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 (布尔表达式) then
--执行语句
end
--示例:
i=6
if (i<7) then
print("yes!")
end
--输出yes!
--if-else语句框架如下
if (布尔表达式) then
--执行语句
else
--执行语句
end
--示例:
i=9
if (i<5) then
print("yes!")
else
print("no!")
end
--输出no!
--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 (布尔表达式) do
--执行语句
end
示例:
i=5
while (i>0) do
print(i)
i=i-1
end
--输出
5
4
3
2
1
--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 函数名(参数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.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
个字符之间的所欲字符,包括i
和j
如果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])