1。 Lua函數可以接受變長數目的參數,和C語言類似,在函數的參數列表中使用(...)表示函數可以接受變長參數
lua函數將參數存放在一個table中,例如arg,那么#arg可以獲得參數的個數
function func_no_p(...) local arg={...} for k,v in pairs(arg} do print(v ..",") end print("輸入參數個數:".. #arg) end func_no_p(1,2,34,1,"string")
2. 運算符方面需要注意的就是 不等式符號和matlab一樣 ~=,還有各種運算符的優先級
^ not - (unary) --這里是符號 * / + - .. < > <= >= ~= == and or
除了^ 和 .. 外所有的二元運算符都是左連續的。
這里要特別注意的是 x^y^2 等價於 x^(y^2)
3. 轉義字符串
| 轉義字符 | 意義 | ASCII碼 |
| \a | 響鈴 | 007 |
| \b | 退格(BS),將當前位置移到前一列 | 008 |
| \f | 換頁(FF),將當前位置移到下頁開頭 | 012 |
| \n | 換行(LF) | 010 |
| \r | 回車(CR) | 013 |
| \t | 水平制表符 | 009 |
| \v | 垂直制表 | 011 |
| \\ | \ | 092 |
| \' | ' | 039 |
| \" | " | 034 |
| \0 | 空字符 | 000 |
| \ddd | 八進制 | 三位八進制 |
| \xhh | 十六進制 | 二位十六進制 |
4. 字符串的一些重要操作
string.upper(argument)
string.lower(argument)
string.gsub(mainString,findString,replaceString,num) --字符串替換
其中num表示要替換的次數,如果num大於等於包含的fingString次數,或者num省略就全部替換,否則從前往后替換num個
> string.gsub("Hello",'l','ee')
輸出 Heeeeeo 2,兩個值
string.find(str,substr,[init,[end]])
其中[ ]是可選參數表示尋找區間,返回兩個值表示子串在原串中起始和終止index
> string.find("Lua is aa new wapon",'ea',5,10)
輸出 16 17
string.reverse(arg)
string.format(...)
格式化字符串,例如string.format('the value is %7.0d',4) 輸出占位7位的4
string.char(arg),string.byte(arg[,int])
將整型數字轉變成字符串連接,和將字符串arg中的首字符或者int指定字符轉換成整數值
> string.char(97,65,48) 輸出 aA0
>string.byte("Hello") 輸出72
string.len(arg) 和#arg相同功能,統計arg的長度
string.rep(string,n) 拷貝n次字符串
.. 字符串的連接
5. Lua數組
Lua中一維數組和多維數組都是table,只不過多維數組中table的每一個索引還對應着table
需要注意的是table的索引可以自己設定值,那么就不限定從0還是從1開始計數了,但默認情況下是從1開始計數的。
如果使用不存在的索引或者超出索引范圍的話,返回nil
二維數組實例
arr={} for i=1,3 do arr[i]={} for j=1,3 do a[i][j]=i*j end end for i=1,3 do for j=1,3 do print(arr[i][j]) end end -- 另一種索引 arr={} maxRows=3 maxCols=3 for row=1,maxRows do for col=1,maxCols do arr[row*maxCols+col]=row*col -- 注意這里並不是從0或者1開始索引的 end end for row=1,maxRows do for col=1,maxCols do print(arr[row*maxCols+col]) end end
6. 迭代器
迭代器包括無狀態迭代器和多狀態迭代器,迭代器一般由迭代函數,‘狀態常量’和‘控制變量’組成,其中狀態常量和控制常量是迭代函數的輸入參數
迭代函數往往輸出兩個值: 控制參數和該控制參數下的函數值,比如我們定義如下的迭代器
function tabSearch(tab1, curIdx) MaxCount = #tab1 if curIdx<maxCount then curIdx=curIdx+1 return curIdx, tab1[curIdx] end end tab1={1,2,3,4,5} for k,v in tabSearch, tab1,0 do print(v) end
ipairs實現方式
function iter(a,i) i=i+1 local v=a[i] if v then return i,v end end function ipairs(a) return iter, a, 0 end
其實無狀態和多狀態迭代器的差別並不大,無狀態迭代器的參數只有狀態常量和控制變量,就好比數組中的最大長度和索引;而多狀態迭代器需要在迭代函數中傳遞許多參數,因此可以利用數組作為狀態常量輸入,如上面的tabSearch迭代函數
7. table操作 (首先lua有垃圾自動回收機制)
table.concat(table,[,sep [,start [,end]]]): 其中sep定義了連接的分隔符,start,end定義了連接的后面的table中范圍
table.insert(table,[pos,] value ])
table.remove(table[,pos])
table.sort(table[,comp]):對指定的table升序排列
days={'Mon',"Tue","Wed","Thu","Fri"}
string1="排序前:"
for k,v in ipairs(days) do
string1=string1.. v.." "
end
print(string1)
table.sort(days)
string2="排序后:"
for k,v in pairs(days) do
string2=string2..v.." "
end
print(string2)
