- 1. 1 注释
- 2. 2. 语句块
- 3. 3. 变QuantitätTypus
- 4. 4 变Quantität定义
- 5. 5 控制语句
- 6. 6 运算符
本Kapitel节介绍简要介绍基本的lua语法,来自RUNOOB.COM基础教学,如有问题,请联系处理
Lua 的语法比较简单,比较容易理解,Funktionsstark。所以,简单的归纳一下Lua的一些语法Regeln,帮助Schneller Eintritt
1 注释
1.1 单行注释
写一个程序,总是少不了注释的。在Lua中,单行注释中,连续两个减Nr.”—“表示注释的开始,一直延续zu行末为止。相当于C、C++语言中的”//”,如下所示
---------- HTTP POST CHANGE PROJECT START ----------
function on_http_finish_cb(key, value)
if key=='data'
then
-- do logical operations, user code
bell_cnt = 0
end
end
1.2 多行注释中
由”–[[“表示注释开始,并且一直延续zu”–]]”为止。这种注释相当于C语言中的”/…/”,如下所示
---------- HTTP POST CHANGE PROJECT START ----------
function on_http_finish_cb(key, value)
if key=='data'
then
-- do logical operations, user code
bell_cnt = 0
--[[ for i = sc_comeState, sc_bellFinsh
do
set_text(i, 3, '00 : 00')
end--]]
end
end
2. 语句块
语句块在C中是用”{“和”}”括起来的,在Lua中,它是用do 和 end 括起来的,end表示最近一个代码块的Ende,比如:
for i = 0, 10
do
print("Hello")
end
或者用then和end括起来
if 1 + 1 ==2
then
print("Hello")
end
3. 变QuantitätTypus
Lua 是动态Typus语言,没有Typus定义(Typus像C,整形、无符Nr.、Charaktere等等),只需要为变QuantitätZuweisung。 值可以存储在变Quantität中,作为Parameter传递或Ergebnis返回。Lua 中有 8 个基本TypusUnterteilung别为:nil、boolean、number、string、userdata、function、thread 和 table,实际屏幕常用Typus主要有以下几种
| Typus | 描述 |
|---|---|
| nil | 这个最简单,只有值nil属于该类,表示一个Unwirksam值(在条件表达式中相当于false),应用中避免出现nil值,需要做非法判断 |
| number | 屏幕的MCU为32位,实际屏幕应用中,Zuweisung的Zahlenwert相当与长整形或单精度浮点型 |
| string | Charaktere串由一对双引Nr.或单引Nr.来表示 |
| table | Lua 中的表(table)其实是一个”关联数组”(associative arrays),数组的索引可以是数字、Charaktere串或表Typus。在 Lua 里,table 的创建是通过”构造表达式”来abgeschlossen.,最简单构造表达式是{},用来创建一个空表 |
| function | 由 C 或 Lua 编写的函数 |
3.1 nil(空)
nil Typus表示一种没有任何Wirksam值,它只有一个值 — nil,例如打印一个没有Zuweisung的变Quantität,便会输出一个 nil 值:
> print(type(a))
nil
>
边界值判断,在实际应用中,引用的变Quantität需要最好要判断是否为空,或防止为空
if type(a) == 'nil'
then
–-user code
else
-–user code
end
3.2 number(数字)
Lua 默认只有一种 number Typus — double(双精度),但是屏幕的MCU是32位处理器,所以,在屏幕Betrieb下仅支持单精度
以下几种写法都被看作是 number Typus:
local a = 2
local b = 2.2
local c = 0.2
local d = 0.2e-1
print(type(a))
print(type(b))
print(type(c))
print(type(d))
Betrieb实例,以上代码执行Ergebnis:
>number
>number
>number
>number
>>number
>number
3. 3 string(Charaktere串)
Charaktere串由一对双引Nr.或单引Nr.来表示
local string1 = "this is string1"
local string2 = 'this is string2'
3.4 table(表)
相当于C里面的数组,在 Lua 里,table 的创建是通过”构造表达式”来abgeschlossen.,最简单构造表达式是{},用来创建一个空表。也可以在表里添加一些Daten,直接初始化表,下标默认从1开始,输出测试如下所示
-- 创建一个空的 table
local tbl1 = {}
-- 直接初始表
local tbl2 = {"apple", "pear", "orange", "grape"}
print(tbl2[0])
print(tbl2[1])
Betrieb实例,以上代码执行Ergebnis:
>nil --报错
>apple
给表的下标0Zuweisung,在输出才正常
-- 直接初始表
local tbl2 = {"apple", "pear", "orange", "grape"}
tbl2[0] = "banana"
print(tbl2[0])
print(tbl2[1])
Betrieb实例,以上代码执行Ergebnis:
>banana
>apple
3.5 function(函数)
在 Lua 中,函数定义声明如下所示,必须定义在被调用者上面
-- function_test.lua Drehbuch文件
function factorial1(n)
if n == 0
then
return 1
else
return n * factorial1(n - 1)
end
end
print(factorial1(5))
Betrieb实例,以上代码执行Ergebnis:
>120
4 变Quantität定义
变Quantität在使用前,需要在代码中进行声明,即创建该变Quantität,变Quantität的默认值均为 nil
全局变Quantität:Lua 中的变Quantität全是全局变Quantität,那怕是语句块或是函数里,除非用 local 显式声明为局部变Quantität
局部变Quantität:作用域为从声明位置开始zu所在语句块Ende
-- test.lua 文件Drehbuch
a = 5 -- 全局变Quantität
local b = 5 -- 局部变Quantität
function joke()
c = 5 -- 全局变Quantität
local d = 6 -- 局部变Quantität
end
print(c,d) --> 5 nil
do
local a = 6 -- 局部变Quantität
b = 6 -- 对局部变Quantität重新Zuweisung
print(a,b); --> 6 6
end
print(a,b) --> 5 6
5 控制语句
5.1 if(判读语句)
控制结构的条件表达式Ergebnis可以是任何值,Lua认为false和nil为假,true和非nil为真。要注意的是Lua中 0 为 true:
local a = 0
if a == 0
then
print("a = 0")
elseif a > 0
then
print("a > 0 ")
else
print("a < 0 ")
end
Betrieb实例,以上代码执行Ergebnis:
>a = 0
不支持switch case 语句
5.2 while(循环)
在条件为 true 时,让程序重复地执行某些语句。执行语句前会先检查条件是否为 true
local a = 10
while(a > 0 )
do
a = a - 1
end
5.3 for(循环)
Lua 编程语言中Zahlenwert for 循环语法Das Format:
- Zahlenwertfor循环
- 泛型for循环
Zahlenwertfor循环
Lua 编程语言中Zahlenwert for 循环语法Das Format,var 从 exp1 变化zu exp2,每次变化以 exp3 为步长递增 var,并执行一次 “执行体”。exp3 是可选的,如果不指定,默认为1。
for var=exp1,exp2,exp3 do
<执行体>
end
实例循环输出1-5Zahlenwert:
for i=1,5 do
print(i)
end
Betrieb实例,以上代码执行Ergebnis:
>1
>2
>3
>4
>5
泛型for循环
泛型 for 循环通过一个迭代器函数来遍历所有值,类似 java 中的 foreach 语句。Lua 编程语言中泛型 for 循环语法Das Format。i是数组索引值,v是对应索引的数组元素值。ipairs是Lua提供的一个迭代器函数,用来迭代数组
--打印数组a的所有值
a = {"one", "two", "three"}
for i, v in ipairs(a) do
print(i, v)
end
实例循环数组 days
days = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
for i,v in ipairs(days)
do
print(v)
end
以上实例输出Ergebnis为:
>Sunday
>Monday
>Tuesday
>Wednesday
>Thursday
>Friday
>Saturday
6 运算符
6.1 算术运算符
下表列出了 Lua 语言中的常用算术运算符,设定 A 的值为10,B 的值为 20:
| Operationen符 | 描述 | 实例 |
|---|---|---|
| + | Zugabe | A + B 输出Ergebnis 30 |
| – | Abzug | A – B 输出Ergebnis -10 |
| * | Multiplikation | A * B 输出Ergebnis 200 |
| / | Außer Gesetz | B / A 输出Ergebnis 2 |
| % | Überschüssen | B % A 输出Ergebnis 0 |
| ^ | 乘幂 | A^2 输出Ergebnis 100 |
| – | 负Nr. | -A 输出Ergebnis -10 |
| ^ | 异常或 | A~BErgebnis30 |
| & | 与 | A&BErgebnis0 |
| I | 或 | AIBErgebnis30 |
我们可以通过以下实例来更加透彻的理解算术运算符的应用:
a = 21
b = 10
c = a + b
print("Line 1 - c 的值为 "..c )
c = a - b
print("Line 2 - c 的值为 "..c )
c = a * b
print("Line 3 - c 的值为 "..c )
c = a / b
print("Line 4 - c 的值为 "..c )
c = a % b
print("Line 5 - c 的值为 "..c )
c = a^2
print("Line 6 - c 的值为 "..c )
c = -a
print("Line 7 - c 的值为 "..c )
c = a~b
print("Line 8 - c 的值为 "..c )
c = a&b
print("Line 9 - c 的值为 "..c )
c = a|b
print("Line 10 - c 的值为 "..c )
以上程序执行Ergebnis为:
>Line 1 - c 的值为 31
>Line 2 - c 的值为 11
>Line 3 - c 的值为 210
>Line 4 - c 的值为 2.1
>Line 5 - c 的值为 1
>Line 6 - c 的值为 441
>Line 7 - c 的值为 -21
>Line 6 - c 的值为 31
>Line 7 - c 的值为 0
>Line 7 - c 的值为 31
6.2 关系运算符
下表列出了 Lua 语言中的常用关系运算符,设定 A 的值为10,B 的值为 20:
| Operationen符 | 描述 | 实例 |
|---|---|---|
| == | gleich ist,检测两个值是否相等,相等返回 true,否则返回 false | (A == B) 为 false。 |
| ~= | nicht gleich,检测两个值是否相等,不相等返回 true,否则返回 false | (A ~= B) 为 true。 |
| > | größer als,如果左边的值größer als右边的值,返回 true,否则返回 false | (A > B) 为 false。 |
| < | kleiner als,如果左边的值größer als右边的值,返回 false,否则返回 true | (A < B) 为 true。 |
| >= | größer als gleich,如果左边的值größer als gleich右边的值,返回 true,否则返回 false | (A >= B) 返回 false。 |
| <= | kleiner als gleich, 如果左边的值kleiner als gleich右边的值,返回 true,否则返回 false | (A <= B) 返回 true。 |
实例,我们可以通过以下实例来更加透彻的理解关系运算符的应用:
a = 21
b = 10
if( a == b )
then
print("Line 1 - a gleich ist b" )
else
print("Line 1 - a nicht gleich b" )
end
if( a ~= b )
then
print("Line 2 - a nicht gleich b" )
else
print("Line 2 - a gleich ist b" )
end
if ( a < b )
then
print("Line 3 - a kleiner als b" )
else
print("Line 3 - a größer als gleich b" )
end
if ( a > b )
then
print("Line 4 - a größer als b" )
else
print("Line 5 - a kleiner als gleich b" )
end
-- 修改 a 和 b 的值
a = 5
b = 20
if ( a <= b )
then
print("Line 5 - a kleiner als gleich b" )
end
if ( b >= a )
then
print("Line 6 - b größer als gleich a" )
end
以上程序执行Ergebnis为:
>Line 1 - a nicht gleich b
>Line 2 - a nicht gleich b
>Line 3 - a größer als gleich b
>Line 4 - a größer als b
>Line 5 - a kleiner als gleich b
>Line 6 - b größer als gleich a
6.3 逻辑运算符
下表列出了 Lua 语言中的常用逻辑运算符,设定 A 的值为 true,B 的值为 false:
| Operationen符 | 描述 | 实例 |
|---|---|---|
| and | 逻辑与Operationen符。 若 A 为 false,则返回 A,否则返回 B。 | (A and B) 为 false。 |
| or | 逻辑或Operationen符。 若 A 为 true,则返回 A,否则返回 B。 | (A or B) 为 true。 |
| not | 逻辑非Operationen符。与逻辑运算Ergebnis相反,如果条件为 true,逻辑非为 false。 | not(A and B) 为 true。 |
实例,我们可以通过以下实例来更加透彻的理解逻辑运算符的应用:
a = true
b = true
if ( a and b )
then
print("a and b - 条件为 true" )
end
if ( a or b )
then
print("a or b - 条件为 true" )
end
print("---------Unterteilung割线---------" )
-- 修改 a 和 b 的值
a = false
b = true
if ( a and b )
then
print("a and b - 条件为 true" )
else
print("a and b - 条件为 false" )
end
if ( not( a and b) )
then
print("not( a and b) - 条件为 true" )
else
print("not( a and b) - 条件为 false" )
end
以上程序执行Ergebnis为:
>a and b - 条件为 true
>a or b - 条件为 true
>---------Unterteilung割线---------
>a and b - 条件为 false
>not( a and b) - 条件为 true
6.4 其他运算符
下表列出了 Lua 语言中的Verbindung运算符与Berechnung表或Charaktere串Länge的运算符:
| Operationen符 | 描述 | 实例 |
|---|---|---|
| .. | Verbindung两个Charaktere串 | a..b ,Von denen a 为 “Hello ” , b 为 “World”, 输出Ergebnis为 “Hello World”。 |
| # | 一元运算符,返回Charaktere串或表的Länge。 | #”Hello” 返回 5 |
实例,我们可以通过以下实例来更加透彻的理解Verbindung运算符与Berechnung表或Charaktere串Länge的运算符的应用:
a = "Hello "
b = "World"
print("VerbindungCharaktere串 a 和 b ", a..b )
print("b Charaktere串Länge ",#b )
print("Charaktere串 Test Länge ",#"Test" )
print("菜鸟Unterricht网址Länge ",#"www.runoob.com" )
以上程序执行Ergebnis为:
>VerbindungCharaktere串 a 和 b Hello World
>b Charaktere串Länge 5
>Charaktere串 Test Länge 4
>菜鸟Unterricht网址Länge 14
6.5 运算符优先级
从高zu低的顺序:
^
not - (unary)
* / %
+ -
..
< > <= >= ~= ==
and
or
除了 ^ 和 .. 外所有的二元运算符都是左Verbindung的
a+i < b/2+1 <--> (a+i) < ((b/2)+1)
5+x^2*8 <--> 5+((x^2)*8)
a < y and y <= z <--> (a < y) and (y <= z)
-x^2 <--> -(x^2)
x^y^z <--> x^(y^z)
实例,我们可以通过以下实例来更加透彻的了解 Lua 语言运算符的优先级:
a = 20
b = 10
c = 15
d = 5
e = (a + b) * c / d;*-- ( 30 \* 15 ) / 5
print("(a + b) * c / d 运算值为 :",e )
e = ((a + b) * c) / d; *-- (30 \* 15 ) / 5
print("((a + b) * c) / d 运算值为 :",e )
e = (a + b) * (c / d);*-- (30) \* (15/5)
print("(a + b) * (c / d) 运算值为 :",e )
e = a + (b * c) / d; *-- 20 + (150/5)
print("a + (b * c) / d 运算值为 :",e )
以上程序执行Ergebnis为:
>(a + b) * c / d 运算值为 : 90.0
>((a + b) * c) / d 运算值为 : 90.0
>(a + b) * (c / d) 运算值为 : 90.0
>a + (b * c) / d 运算值为 : 50.0
Antwort veröffentlichen