pretty code

顯示具有 Lua 標籤的文章。 顯示所有文章
顯示具有 Lua 標籤的文章。 顯示所有文章

2019年9月10日 星期二

Lua 使用小技巧

變數 Scope

變數前面加上 local 保留字,便是區域變數。


變數型别

number, boolean, nil, table, function, string,最後 2 種為 thread and userdata。

table, function 傳值時,傳的是參考。

local a, b = 1, 2 可以賦值給多個變數,不足的預設是 nil。


邏輯判斷

if flag == true then
    print('true')
else
    print('false')
end


迴圈

for i = 1, 100, 1 do
    -- do something.
end

上面表示 i 從 1 開始,做到 100,間隔 1。

for key, value in pairs(t) do
    print(key, value)
end

印出 table 變數 t 的 key and value

Table 使用

t = {}
t['name'] = John
t['age'] = 18
t[0] = 1
t[1] = 1

上面宣告了一個 table 變數 t,如果要當純陣列用,索引最好從 1 開始,因為長度從 1 開始計算,並且只算純數字索引的元素,不過使用 for 迴圈,則會全部都 iterate 一遍。

可以使用 t[1] = nil 來去除元素。
#t 可以得到陣列長度


函數宣告

function test(a, b)
    -- do something.
    return xxx
end

函數回傳值也可以有多個。


註解

'- -' 為單行註解


字串串接

local s = 'Hello' .. ' World'

字串可以使用單引號或雙引號。

2019年9月9日 星期一

UEFI application - Lua 試用

Lua 是一個輕巧的 script language,可以輕易的與 C 或其他語言結合。

UDK base 中已經含有 porting 好的 Lua project,其版本為 5.2.3

不像 Python,Lua 在 UDK 編譯中完全沒有問題。

使用 Lua,其檔案需為 ASCII 編碼。

目前實測僅有一個地方覺得怪怪的,那就是 os.execute( ) 這個函數,感覺每次都會再帶一個新的 UEFI Shell 起來,如果記憶體回收沒做好,也許會有問題?

2019/09/09 更新
寫了一個簡單的 script 來測試 memory 使用情形,看得出來執行後,可用記憶體減少了約 1MB,好像也還好?


print('start')

os.execute('memmap > before.txt');

for a = 1, 100, 1 do
    print(a)
    os.execute('Counter.efi')
    os.execute('stall 300000')
end

os.execute('memmap > after.txt');

print('end')