LUA 기본 구문 설명

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

LUA 기본 구문 설명

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

Lua 的语法比较简单,比较容易理解,Powerful Features。所以,简单的归纳一下Lua的一些语法ルール,帮助クイック·エントリー

1 注释

1.1 单行注释

写一1つの手続き,总是少不了注释的。在Lua中,单行注释中,连续2つ减号"--"表示注释的开始,一直延续到行末为止。相当于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表示最近一个代码块的结束,比如:

for i = 0, 10
do 
    print("Hello") 
end

或者用then和end括起来

if 1 + 1 ==2
then 
    print("Hello") 
end

3. 变量タイプ

Lua 是动态タイプ语言,ないタイプ定义(タイプ像C,整形、符号なし。、文字等等),只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果戻る。Lua 中有 8 个基本タイプ分别为:nil、boolean、number、string、userdata、function、thread 和 table,实际屏幕常用タイプ主要有以下几种

TypeDescription
nil这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false),应用中避免出现nil值,需要做非法判断
number屏幕的MCU为32位,实际屏幕应用中,赋值的数值相当与长整形或单精度浮点型
stringストリング·ストリング由一对双引号或单引号来表示
tableLua 中的表(table)其实是一个"关联配列"(associative arrays),配列的索引可以是数字、ストリング·ストリング或表タイプ。在 Lua 里,table 的作成是経由"构造表达式"来完成,最简单构造表达式是{},用来作成一个空表
function由 C 或 Lua 编写的函数

3.1 nil(空)

nil タイプ表示一种ない任何有效值,它只有一个值 -- nil,例如打印一个ない赋值的变量,便会出力一个 nil 值:

> print(type(a))
nil
>

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

if type(a) == 'nil'
then
    –-user code
else
    -–user code
end

3.2 number(数字)

Lua デフォルト只有一种 number Type -- double(双精度),但是屏幕的MCU是32位処理器,所以,在屏幕运行下仅サポート单精度

以下几种写法都被看作是 number Type:

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

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

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

3. 3 string(ストリング·ストリング)

ストリング·ストリング由一对双引号或单引号来表示

local string1 = "this is string1"
local string2 = 'this is string2'

3.4 table(表)

相当于C里面的配列,在 Lua 里,table 的作成是経由"构造表达式"来完成,最简单构造表达式是{},用来作成一个空表。也可以在表里追加一些データ,直接初期化表,下标デフォルト从1开始,出力测试如下所示

-- 作成一个空的 table
local tbl1 = {}
-- 直接初始表
local tbl2 = {"apple", "pear", "orange", "grape"}
print(tbl2[0])
print(tbl2[1])

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

>nil --报错
>apple

给表的下标0赋值,在出力才正常

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

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

>banana
>apple

3.5 function(函数)

在 Lua 中,函数定义声明如下所示,必须定义在被调用者上面

-- function_test.lua 脚本記事件
function factorial1(n)
    if n == 0 
    then
        return 1
    else
        return n * factorial1(n - 1)
    end
end

print(factorial1(5))

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

>120

4 变量定义

变量在使用前,需要在代码中进行声明,即作成该变量,变量的デフォルト値均为 nil

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

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

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

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

do
    local a = 6     -- 局部变量
    b = 6           -- 对局部变量重新赋值
    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

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

>a = 0

サポートなし。switch case 语句

5.2 while(循环)

在条件为 true 时,让程序重复地执行某些语句。执行语句前会先チェック条件是否为 true

local  a = 10
while(a > 0 )
do
    a = a - 1
end

루 프 구 문 형 식의 Lua 프로그래밍 언어 의 숫자 값 :

  • numerical valuefor循环
루 프 값

Lua プログラミング语言中数值 for 循环语法格式,var 从 exp1 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次exp 3 은 선택 사항 이며 지정 하지 않으면 기본 값 은 1 입니다 .

for var = exp 1, exp 2, exp 3 do  
    <실행 체>  
끝

인 스턴 스 루 프 출 력 1 - 5 값 :

for i = 1. 5 do
    print (i)
끝

인 스턴 스를 실행 하면 위의 코 드가 실행 됩니다 .

>1
>2
>3
>4
>5
범 용 for 루 프

일반 for 루 프는 ja va 의 fore ach 문 과 마찬가지로 반복 기 함 수를 통해 모든 값을 통과 합니다 . Lua 프로그래밍 언어 의 일반 for 루 프 구 문 형 식 입니다 . i 는 배 열 인 덱 스 값 이고 v 는 해당 인 덱 스의 배 열 요소 값 입니다 . ipa irs 는 배 열 을 반복 하기 위해 Lua 에서 제공하는 반복 기 함 수 입니다 .

- 배 열 a 의 모든 값을 인쇄 합니다 .  
a = {" one ", " two ", " three "}
ipa irs (a) do 의 i , v 에 대해
    print ( i , v)
끝

인 스턴 스 순 환 배 열 days

days = {" 일요일 ", " 월 요일 ", " 화 요일 ", " 수 요일 ", " 목 요일 ", " 금요일 ", " 토 요일 "} 
for i , v in ipa irs (day s) 
도 (Do) 
    인쇄 (v) 
끝

위의 예 제 출 력은 다음과 같습니다 .

>일요일
>월 요일
>화 요일
>수 요일
>목 요일
>금요일
>토 요일 .

6 운영 자

6. 1 산 술 연 산 자

다음 표 에서는 Lua 언어 에서 일반적으로 사용되는 산 술 연 산 자를 나 열 하고 A 의 값 은 10 이 고 B 의 값 은 20 입니다 .

&&
操作符Description实例

다음 예 제를 통해 산 술 연 산 자의 적용 을 더 잘 이해할 수 있습니다 .

a = 21
b = 10

c = a + b
.. print (" L ine 1 - c 의 값 은C)

c = a - b
.. print (" L ine 2 - c 의 값 은C)

c = a * b
.. print (" L ine 3 - c 의 값 은c)

c = a / b
.. print (" L ine 4 - c 의 값 은C)

c = a % b
.. print (" L ine 5 - c 의 값 은C)

c = a ^ 2
.. print (" L ine 6 - c 의 값 은C)

c = - a
.. print (" L ine 7 - c 의 값 은C)

c = a ~ b
.. print (" L ine 8 - c 의 값 은C)

c = a
.. print (" L ine 9 - c 의 값 은C)

c = a| b
.. print (" L ine 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 입니다 .

연 산 자 설명 인 스턴 스 == 는 두 값 이 같 는지 여 부를 검 출 하고 , 같은 값 은 true 를 반환 하며 , 그렇지 않으면 false (A == B) 를 false 로 반환 합니다 .
~= 는 두 값 이 같 는지 여 부를 검 출 하고 , 불 균 형 은 true 를 반환 하며 , 그렇지 않으면 false (A ~= B) 가 true 를 반환 합니다 .
>왼쪽 값 이 오른쪽 값 보다 큰 경우 true 를 반환 하고 그렇지 않으면 false (A B) 가 false 입니다 .>
<왼쪽 값 이 오른쪽 값 보다 큰 경우 false 를 반환 하고 그렇지 않으면 true (A B) 가 true 입니다 .<
>왼쪽 값 이 오른쪽 값 보다 크 거나 같 으면 true 를 반환 하고 그렇지 않으면 false 를 반환 합니다 (A = B).>
<왼쪽 값 이 오른쪽 값 보다 작 거나 같 으면 true 를 반환 하고 그렇지 않으면 false 를 반환 합니다 (A = B).<

다음 예 제를 통해 관계 연 산 자의 적용 을 더 잘 이해할 수 있습니다 .

a = 21
b = 10

if (a == b)
그러면
   print (" L ine 1 - a 는 b 와 같습니다 ")
다른 것
   print (" L ine 1 - a 는 b 와 같지 않습니다 ")
끝

if (a ~ = b)
그러면
   print (" L ine 2 - a 는 b 와 같지 않습니다 ")
다른 것
   print (" L ine 2 - a 는 b 와 같습니다 ")
끝

if ( a 
그러면
   print (" L ine 3 - a 가 b 보다 작 다 ")
다른 것
   print (" L ine 3 - a 는 b 보다 크 다 ")
끝

if ( a 
그러면
   print (" L ine 4 - a 는 b 보다 크 다 ")
다른 것
   print (" L ine 5 - a 보다 작 거나 b 와 같 음 ")
끝

a 및 b 의 값을 변경 합니다 .
a = 5
b = 20
if ( a 
그러면
   print (" L ine 5 - a 보다 작 거나 b 와 같 음 ")
끝

if ( b 
그러면
   print (" L ine 6 - b 는 a 보다 크 다 ")
끝

위의 절차 의 실행 결과는 다음과 같습니다 .

>선 1 - a 는 b 와 같지 않습니다 .
>선 2 - a 는 b 와 같지 않습니다 .
>Line 3 - a 가 b 보다 크 거나 같 음
>Line 4 - a 는 b 보다 크 다
>선 5 - a 가 b 보다 작 거나 같 음
>Line 6 - b 가 a 보다 크 거나 같 음

6. 3 논 리 연 산 자

다음 표 에서는 Lua 언어 에서 일반적으로 사용되는 논 리 연 산 자를 나 열 하고 A 의 값을 true 로 , B 의 값을 false 로 설정 합니다 .

연 산 자는 인 스턴 스 및 논 리 및 연 산 자를 설명 합니다 .
A 가 false 인 경우 A 를 반환 하고 그렇지 않으면 B 를 반환 합니다 . (A 및 B) 가 false 입니다 .
or 논 리 또는 연 산 자 입니다 .A 가 true 인 경우 A 를 반환 하고 그렇지 않으면 B 를 반환 합니다 . (A 또는 B) 는 true 입니다 .
not 논 리적 비 연 산 자 입니다 .논 리 연 산 의 결과 와는 달리 , 조건 이 true 인 경우 논 리 비 는 false 입니다 . not (A 및 B) 는 true 입니다 .

다음 예 제를 통해 논 리 연 산 자의 적용 을 더 잘 이해할 수 있습니다 .

a = true
B = true

if (a 및 b)
그러면
   print (" a 및 b - 조건 이 true ")
끝

if (a 또는 b)
그러면
   print (" a 또는 b - 조건 이 true " 입니다 .)
끝

print (" -- -------- - 분 할 선 -- -------- - ")

a 및 b 의 값을 변경 합니다 .
a = false
B = true

if (a 및 b)
그러면
   print (" a 및 b - 조건 이 true ")
다른 것
   print (" a 및 b - 조건 이 false ")
끝

if (no (a 및 b))
그러면
   print (" not (a and b) - 조건 이 true ")
다른 것
   print (" not (a and b) - 조건 이 false ")
끝

위의 절차 의 실행 결과는 다음과 같습니다 .

>a 및 b - 조건 이 true 입니다 .
>a 또는 b - 조건 이 true 입니다 .
>-- ---- --- 분 할 선 -- ---- ---
>a 및 b - 조건 이 false 입니다 .
>not (a and b) - 조건 이 true 입니다 .

6. 4 다른 연 산 자

다음 표 에서는 Lua 언어 의 연결 연 산 자와 테이블 또는 문자 열 의 길 이를 계산 하는 연 산 자를 나 열 합니다 .

연 산 자 설명 인 스턴 스 ..
두 개의 문자 열 을 연결 합니다 . ab , 여기서 a 는 " H ello ", b 는 " World " 이며 출 력은 " H ello World " 입니다 .
# 문자 열 또는 테이블 의 길 이를 반환 하는 1 차 원 연 산 자 입니다 .# " 안 녕 하세요 " 5 을 반환 합니다 .

다음 예 제를 통해 테이블 또는 문자 열 길 이를 계산 하는 연 산 자와 연결 연 산 자의 적용 을 더 잘 이해할 수 있습니다 .

< codee > a = " 안 녕 하세요 "
b = " 세계 "

print (" a 와 b 를 연결 하는 문자 열 ", a .. (b)
print (" b 문자 열 길이 ", # b)
print (" Str ing Test Leng th ", # " Test ")
print (" 초 보자 튜 토 리 얼 URL 길이 ", # " www . example . com ")

위의 절차 의 실행 결과는 다음과 같습니다 .

>문자 열 a 와 b 를 연결 합니다 .     안녕 하세요 , 세계
>b 문자 열 길이     5
>문자 열 테스트 길이     4
>초 보 자 튜 토 리 얼 URL 길이     14

6. 5 연 산 자 우선 순 위

높은 순 서 에서 낮은 순 서 :

^
not    - (단 일)
*      /       %
+      -
..
<      >      <=     >=     ~=     ==
그리고
또는

^ 와 ^ 를 제외하고 는 ...    모든 이 진 연 산 자는 왼 쪽으로 연결 됩니다 .

a + i b / 2 + 1<          <-->       (a+i) 
5 + x ^ 2 * 8              <-->       5 + ((x ^ 2) * 8)
a      <-->       (a 
- 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 + (1 50 / 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
Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC verification and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email address will not be published. Required fields are marked *.