LUA 基本语法说明

kostenlosKostenloses technisches Material

Dieser Inhalt ist direkt lesbar und eignet sich für das Grundlagenlernen und die Suche.

LUA 基本语法说明缩略图
🌐 Diese Seite ist noch nicht auf Deutsch verfügbar. Die chinesische Version wird angezeigt. Zurück zur chinesischen Seite.
本文目录
  1. 1. 1 注释
  2. 2. 2. 语句块
  3. 3. 3. 变量Typus
  4. 4. 4 变量定义
  5. 5. 5 控制语句
  6. 6. 6 运算符

本章节介绍简要介绍基本的lua语法,来自RUNOOB.COM基础教学,如有问题,请联系处理

Lua 的语法比较简单,比较容易理解,Funktionsstark。所以,简单的归纳一下Lua的一些语法Regeln,帮助Schneller Eintritt

1 注释

1.1 单行注释

写一个程序,总是少不了注释的。在Lua中,单行注释中,连续两个减号”“表示注释的开始,一直延续到行末为止。相当于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 多行注释中

由”–[[“表示注释开始,并且一直延续到”–]]”为止。这种注释相当于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. 变量Typus

Lua 是动态Typus语言,没有Typus定义(Typus像C,整形、无符号、Charaktere等等),只需要为变量Zuweisung。 值可以存储在变量中,作为参数传递或结果返回。Lua 中有 8 个基本Typus分别为:nil、boolean、number、string、userdata、function、thread 和 table,实际屏幕常用Typus主要有以下几种

Typus描述
nil这个最简单,只有值nil属于该类,表示一个Unwirksam值(在条件表达式中相当于false),应用中避免出现nil值,需要做非法判断
number屏幕的MCU为32位,实际屏幕应用中,Zuweisung的Zahlenwert相当与长整形或单精度浮点型
stringCharaktere串由一对双引号或单引号来表示
tableLua 中的表(table)其实是一个”关联数组”(associative arrays),数组的索引可以是数字、Charaktere串或表Typus。在 Lua 里,table 的创建是通过”构造表达式”来abgeschlossen.,最简单构造表达式是{},用来创建一个空表
function由 C 或 Lua 编写的函数

3.1 nil(空)

nil Typus表示一种没有任何Wirksam值,它只有一个值 — nil,例如打印一个没有Zuweisung的变量,便会输出一个 nil 值:

> print(type(a))
nil
>

边界值判断,在实际应用中,引用的变量需要最好要判断是否为空,或防止为空

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实例,以上代码执行结果:

>number
>number
>number
>number
>>number
>number

3. 3 string(Charaktere串)

Charaktere串由一对双引号或单引号来表示

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实例,以上代码执行结果:

>nil --报错
>apple

给表的下标0Zuweisung,在输出才正常

-- 直接初始表
local tbl2 = {"apple", "pear", "orange", "grape"}
tbl2[0] = "banana"
print(tbl2[0])
print(tbl2[1])

Betrieb实例,以上代码执行结果:

>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实例,以上代码执行结果:

>120

4 变量定义

变量在使用前,需要在代码中进行声明,即创建该变量,变量的默认值均为 nil

全局变量:Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量

局部变量:作用域为从声明位置开始到所在语句块Ende

-- test.lua 文件Drehbuch
a = 5               -- 全局变量
local b = 5         -- 局部变量

function joke()
    c = 5           -- 全局变量
    local d = 6     -- 局部变量
end
print(c,d)          --> 5 nil

do
    local a = 6     -- 局部变量
    b = 6           -- 对局部变量重新Zuweisung
    print(a,b);     --> 6 6
end
print(a,b)          --> 5 6

5 控制语句

5.1 if(判读语句)

控制结构的条件表达式结果可以是任何值,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实例,以上代码执行结果:

>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 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次 “执行体”。exp3 是可选的,如果不指定,默认为1。

for var=exp1,exp2,exp3 do  
    <执行体>  
end

实例循环输出1-5Zahlenwert:

for i=1,5 do
    print(i)
end

Betrieb实例,以上代码执行结果:

>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

以上实例输出结果为:

>Sunday
>Monday
>Tuesday
>Wednesday
>Thursday
>Friday
>Saturday

6 运算符

6.1 算术运算符

下表列出了 Lua 语言中的常用算术运算符,设定 A 的值为10,B 的值为 20:

Operationen符描述实例
+ZugabeA + B 输出结果 30
AbzugA – B 输出结果 -10
*MultiplikationA * B 输出结果 200
/Außer GesetzB / A 输出结果 2
%ÜberschüssenB % A 输出结果 0
^乘幂A^2 输出结果 100
负号-A 输出结果 -10
^异常或A~B结果30
&A&B结果0
IAIB结果30

我们可以通过以下实例来更加透彻的理解算术运算符的应用:

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 )

以上程序执行结果为:

>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

以上程序执行结果为:

>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符。与逻辑运算结果相反,如果条件为 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("---------分割线---------" )

-- 修改 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

以上程序执行结果为:

>a and b - 条件为 true
>a or b - 条件为 true
>---------分割线---------
>a and b - 条件为 false
>not( a and b) - 条件为 true

6.4 其他运算符

下表列出了 Lua 语言中的Verbindung运算符与计算表或Charaktere串Länge的运算符:

Operationen符描述实例
..Verbindung两个Charaktere串a..b ,其中 a 为 “Hello ” , b 为 “World”, 输出结果为 “Hello World”。
#一元运算符,返回Charaktere串或表的Länge。#”Hello” 返回 5

实例,我们可以通过以下实例来更加透彻的理解Verbindung运算符与计算表或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" )

以上程序执行结果为:

>VerbindungCharaktere串 a 和 b     Hello World
>b Charaktere串Länge     5
>Charaktere串 Test Länge     4
>菜鸟Unterricht网址Länge     14

6.5 运算符优先级

从高到低的顺序:

^
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 )

以上程序执行结果为:

>(a + b) * c / d 运算值为  :    90.0
>((a + b) * c) / d 运算值为 :    90.0
>(a + b) * (c / d) 运算值为 :    90.0
>a + (b * c) / d 运算值为   :    50.0
来源/Werkzeuge信息 —— 点击展开
来源 Modbus Chinesisches Netzwerk(modbus.cn) —— Inländisch führend.ModbusKommunikationsprotokoll Technologie Gemeinschaft Klassifizierung LUA-Skript - Dokument / Touchscreen-Entwicklung Dokumentation 字数 6578 字 · 阅读约 17 分钟 更新 2026-07-01 永久链接 https://www.modbus.cn/7374.html
Empfohlene Werkzeuge: Modbus Debugger-Assistent WeChat-Applet
Modbus Chinesisches Netzwerk官方推出的Modbus Debugging-Tools,支持 Modbus RTU/TCP 实时KommunikationTests、Register.读写、线圈控制、Daten监控和Meldung分析。 keine Installation erforderlich,Mikro-Suche「Modbus DebuggingAssistenten.」Benutzt werden kann.。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
Relevante Etiketten
Sollte man diese Informationen für ein echtes Projekt verwenden?

Gehen Sie zum Tool Center, um Nachrichten zu analysieren, CRC-Prüfungen und Geräte-Debugging zu erledigen, oder senden Sie Anforderungen für Auswahl - und Zugangsvorschläge.

Ingenieur Mitglied

Verwandeln Sie diesen Artikel in ein umsetzbares Debuggermaterial

Erweiterte Nachrichtenanalyse, Paket-Downloads, Codebeispiele, Engineering-Szenarien und Priority-Technischer Support sind für die Real-Projekt - Bereitstellung möglich.

Unbegrenzte Werkzeuge
Datenpaket und Codepaket
Vollständige Engineering Case-Basis
Vorrangiger Zugang zum technischen Support

Antwort veröffentlichen

Ihre E-Mail - Adresse wird nicht öffentlich gemacht. Erforderliche Elemente wurden verwendet * markiert.