標籤:格式 sort abs ascii 運算 可變參數 接受 pair local
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)endfunc_no_p(1,2,34,1,"string")
2. 運算子方面需要注意的就是 不等式符號和matlab一樣 ~=,還有各種運算子的優先順序
^not - (unary) --這裡是符號* /+ -..< > <= >= ~= ==andor
除了^ 和 .. 外所有的二元運算子都是左連續的。
這裡要特別注意的是 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 |
Null 字元 |
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 endendfor i=1,3 do for j=1,3 do print(arr[i][j]) endend-- 另一種索引arr={}maxRows=3maxCols=3for row=1,maxRows do for col=1,maxCols do arr[row*maxCols+col]=row*col -- 注意這裡並不是從0或者1開始索引的 endendfor row=1,maxRows do for col=1,maxCols do print(arr[row*maxCols+col]) endend
6. 迭代器
迭代器包括無狀態迭代器和多狀態迭代器,迭代器一般由迭代函數,‘狀態常量’和‘控制變數’組成,其中狀態常量和控制常量是迭代函數的輸入參數
迭代函數往往輸出兩個值: 控制參數和該控制參數下的函數值,比如我們定義如下的迭代器
function tabSearch(tab1, curIdx) MaxCount = #tab1 if curIdx<maxCount then curIdx=curIdx+1 return curIdx, tab1[curIdx] endendtab1={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 endendfunction ipairs(a) return iter, a, 0end
其實無狀態和多狀態迭代器的差別並不大,無狀態迭代器的參數只有狀態常量和控制變數,就好比數組中的最大長度和索引;而多狀態迭代器需要在迭代函數中傳遞許多參數,因此可以利用數組作為狀態常量輸入,如上面的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.." "endprint(string1)table.sort(days)string2="排序後:"for k,v in pairs(days) do string2=string2..v.." "endprint(string2)
Lua學習筆記3. 函數可變參數和運算子、逸出字元串、數組