2021年5月6日 星期四

10分鐘學會Lua Basics ( Multiple Assignment, Table, Module, Function )

這是一篇文章能讓你10 分鐘學會lua 基本用法的教學文

底下是這篇文章會介紹到的基本用法,灰色部分會在其他章節中另外介紹

Lua Basics

Comment

String

Number

Variable scope

Ternary Operator

Loop Activity(while, repeat)

Table

Multiple Assignment

Function

Module 

Coroutines(點我)

Metatables

Prototype Based OO Programming

LuaJIT - FFI Library


以下會用各種範例來和大家介紹lua有哪些功能和用法,知道這些用法之後,遇到不懂的語法也能知道怎麼搜尋關鍵字 


#Lua Basic


Comment


註解用--表示,多行可以用兩個中括號包起來



String


輸出結果如下

Size of string is 4

I am a long long long long
        long
......string ~
Iris+I am a long long long long
        long
......string ~


Number


輸出結果如下

Type is number

9223372036854775807

-9223372036854775808

float precision is 1.1234567890123



Variable scope


輸出結果如下

You can go to school

10

nil


Ternary Operator (三元運算子)

如果寫過C的寶寶們應該知道 x = (condition) ? (if-match) :( if not match) 這種寫法,在lua也有喔  只是? :變成and 和 or


輸出結果如下

x is negative

x is negative



Loop Activity 

在lua中的迴圈可以簡單分為三種 for, while..do, repeat...until,因為for在很多範例中會介紹,這裡就不多介紹


- while


輸出結果如下

i= 1

end

i= 2

continue

i= 3

break


repeat


輸出結果如下

value is: 3

value is: 2

value is: 1

value is: 0


Table

Table,我覺得這可以說是lua實現黑魔法的開始,table中可以放各種東西,function, string, number...所有東西都能放到table並且也可以輕鬆地使用


先從一個簡單的例子來看


輸出結果如下

(1)January

(2)February

(3)March

(4)April

* January

Number of Items is 4

那如果我們在table中塞入不同類型的參數就如下面


輸出結果如下

Hi

iris


Multiple Assignment

這個用法挺方便的,假如我有一個座標是(3,5) 程式碼就能寫成 x,y = 3,5 這樣x就被給予3這個值, y就被給予5這個值,如果同時要assign相同類型的變數,可以用這個方法,下面有個簡單的範例


輸出結果如下

3 5

4 4


Function

前面的範例就有用到簡單的function, 而function 的回傳值就用到multi-assignment的概念

那這個範例順便包含了字串的處理,也有提到在字串處理常使用到正規表示式,相對而言比較方便的語法


輸出結果如下

1: She

2: is

3: a

4: girl

5: nil


Module

Module 中文式模塊的意思,他可以用require() 呼叫的library,並且具有包含表的單個全局名稱

該模塊可以包含許多功能和變量。所有這些函數和變量都包裝在表中,該表用作名稱空間。


前面這些太難懂了,簡單來說  Module就是一個table

寫一個module的方法如下


這邊就能很簡單的理解module就是一個table,那要在另外一隻檔案中引用它也很簡單


輸出結果如下

Hello World!

BMC


基礎語法介紹到這邊就差不多了,大家學廢了嗎😏


1 則留言:

  1. 感谢很好的入门教程
    用的lua 5.3
    最后一个return Engineer lua总是报错
    看起来和文档的example 没差
    https://www.tutorialspoint.com/lua/lua_modules.htm

    模仿spx code 去写就没什么问题不过看起来结构不太一样:
    function module()
    -- 先新增一個table
    local module_table = {}

    module_table.Type = "BMC"

    function module_table.sayHi(...)
    print("Hello World!")
    end

    return module_table
    end

    -- 這邊engineer 就可以看成一個table
    local container = module()

    -- 可以用module中的各種變數或函數
    container.sayHi()

    print(container.Type)


    eyer@mega1:~/lab$ lua eyer.lua
    Hello World!
    BMC

    回覆刪除

注意:只有此網誌的成員可以留言。