基礎概念
程序塊 (chunk)
定義
<code>a = 1b = a * 2a = 1;b = a * 2a = 1; b = a * 2a = 1 b = a * 2/<code>
一個程序塊可以僅包含一條語句,也可以由多條不同的語句或函數的定義構成
當使用任何參數直接運行解釋器時會看到這樣得提示符
<code>Lua 5.1.5 Copyright (C) 1994-2012 Lua.org Puc-Rio>/<code>再這種模式下輸入得每條命令都將立即被執行要退出交互模式和解釋器可以調用操作系統庫的 exit 函數,輸入 os.exit()或者 end-of-file 控制字符,在 DOS/Windows 中是
但將多行內容放入文件中才是更常見的做法
<code>-- fact.lua 階乘文件function fact(n) if n == 0 then return 1 --0的階乘是1 else return n * fact(n - 1) --輸入3會執行 3 * 2 * 1 endendprint("Enter a number:")a = io.read("*number")print(fact(a))/<code>
-i 參數
通過 -i 參數來啟動解釋器lua -i prog這樣會先運行文件 prog 中的程序塊後再進入交互模式讀取用戶輸入並指定格式
io.read("*number") 讀取數字格式dofile 函數
立即執行一個函數文件運行後如果無報錯相當於加載了這個lua 文件中的函數庫就可以在後續的交互模式中直接調用這個函數庫裡定義的方法方便測試新的代碼,在代碼編輯器中修改後在交互模式中執行dofile即加載修改後新的代碼使用 dofile 后里面字符串文件路徑的 \\ 記得再用一次 \\ 進行轉義如:dofile("d:\\demo\\a.lua")<code>-- lib1.lua-- 計算兩個數的平方和在開平方根function norm(x, y) return (x ^ 2 + y ^ 2) ^ 0.5end-- 計算某數的兩倍function twice(n) return n * 2end/<code>
<code>> dofile("lib1.lua") -- 加載你編寫的程序庫,需要填完整的文件路徑> n = norm(3.14, 1.0)> print(twice(4)) -- 8/<code>
詞法規範
標識符
可以由任意字母、下劃線、數字構成的字符串但不可以由數字開頭避免使用以一個下劃線開頭之後跟著一個或多個大寫字母的標識符
lua 會將這些標識符保留,用作特殊用途如 _VERSION, _PROMPT因為這是 lua 中的啞變量區域設置(Locale)
保留字
lua中區分大小寫,如 "And" "AND" 是可以作為變量的,且與保留字 and 完全不同
註釋的寫法
單行註釋:--code block多行註釋:--[[ code block ]]一旦寫了註釋後面的代碼將不會起作用,解釋器會將其忽略小技巧:建議這樣寫多行註釋 --[[ code block --]]可以在塊註釋前加一個連字符 - 即可啟用代碼塊中的代碼<code>--[[ print(222) print(666) --都不起作用(因為塊註釋註釋掉了其中的代碼)--]]-- 常規寫法加一個連字符寫塊註釋---[[ print(222) print(666) --會報錯]]-- 推薦寫法加一個連字符寫塊註釋-- 因為這樣寫的話,第一行和最後一行就變成了兩個彼此獨立的單行註釋---[[ print(222) print(666)--]]/<code>
全局變量
全局變量不需要聲明只需要將一個值賦給這個全局變量即可創建在 lua 中訪問一個未初始化的變量並不會發生錯誤但訪問的結果是一個特殊的值 nil ,也就是空值刪除全局變量,將它賦值為 nil<code>print(b) -- nilb = 10print(b) -- 10-- 刪除全局變量b = nil print(b) -- nil/<code>
解釋器程序
[] 代表可選項lua [選項參數] [腳本[參數]]不使用參數會直接進入交互模式-e 直接在命令行中輸入代碼如果只有 -e ,沒有 -i 那麼就不會進入交互模式,而是運行後直接結束-l 用於加載庫文件_PROMPT
<code>lua -i -e "_PROMPT = 'lua>'"Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Riolua>/<code>
在交互模式中打印任何表達式的值
在解釋器執行其參數前
運行腳本前的參數
在腳本代碼中,可以通過全局變量 arg 來檢索腳本的啟動參數解釋器在運行腳本前,會用所有的命令行參數創建一個名為 arg 的 table腳本名稱位於索引 0 上它的第一個參數(示例中的 a) 位於索引1 ,以此類推而在 腳本文件(示例中的><code>lua 腳本 a b clua -e "sin = math.sin">
<code>lua 腳本 a b clua -e "sin = math.sin">
心得體會
沒有熟練掌握的保留字