LUA 기본 구문 설명

무료무료 기술 자료

이 글은 바로 읽을 수 있으며 기초 학습과 검색 유입에 적합합니다.

LUA 기본 구문 설명

本章节介绍简要介绍基本的lua语法,来自RUNOOB.COM基础教学,如有문제,请문의处理

Lua 的语法比较简单,比较容易理解,강력한 성능。所以,简单的归纳一下Lua的一些语法规则,帮助快速入门

1 注释

1.1 单行注释

写一个程序,总是少不了注释的。在Lua中,单行注释中,连续两个减号"--"表示注释的开始,一直延续到行末为止。相当于C、C++언어中的"//",如下所示

---------- HTTP POST CHANGE PROJECT START ----------
function on_http_finish_cb(key, value)

    if key=='데이터' 
    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=='데이터' 
    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、user데이터、function、thread 和 table,实际屏幕常用유형主要有以下几种

유형설명
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 유형 -- double(双精度),但是屏幕的MCU是32位处理器,所以,在屏幕运行下仅支持单精度

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

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 프로그래밍 언어 의 숫자 값 :

  • 数值for循环
루 프 값

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 입니다 .

&&
操作符설명实例

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

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
실제 프로젝트에 이 자료를 활용하시겠습니까?

도구 센터에서 프레임 분석, CRC 검증, 장비 디버깅을 진행하거나 요청을 제출하여 선정 및 연동 제안을 받아보세요.

엔지니어 회원

이 글을 실행 가능한 디버깅 자료로 활용하세요

가입하면 고급 프레임 분석, 자료 패키지 다운로드, 코드 예제, 엔지니어링 사례, 우선 기술 지원을 이용할 수 있어 실제 프로젝트 납품에 적합합니다.

고급 도구 무제한 이용
자료 패키지와 코드 패키지
완전한 엔지니어링 사례 라이브러리
우선 기술 지원 채널

답글 작성

이메일 주소는 공개되지 않습니다. 必填项已用 * 标注