變數 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'
字串可以使用單引號或雙引號。
pretty code
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,好像也還好?
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')
訂閱:
文章 (Atom)
