Lua學習筆記3. 函數可變參數和運算子、逸出字元串、數組

來源:互聯網
上載者:User

標籤:格式   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. 函數可變參數和運算子、逸出字元串、數組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.