每日一Lua(3)-函數

來源:互聯網
上載者:User

1.簡單的例子

lua中的函數和c中的很相似,下面是數組累加的例子:

nums={3,321,11,23,32}function add(a)local sum=0for k,v in ipairs(a) dosum=sum+vendreturn sumendprint(add(nums))

2.返回多個值

lua中的函數可以有多個傳回值,下面的例子就找到最大值和它的位置。

function maximum (a)local mi = 1-- index of the maximum valuelocal m = a[mi]-- maximum valuefor i,val in ipairs(a) doif val > m thenmi = i; m = valendendreturn m, miendprint(maximum({8,10,23,12,5}))

可以利用這樣的函數一次性給多個變數賦值,如果變數的個數多餘函數的傳回值個數,那麼多餘變數就賦值為nil,如果利用返回多個值的函數給某一個變數賦值的時候,只把函數返回的第一個值賦給變數。

還是接著上面的例子;

a,b,c=maximum({8,10,23,12,5})d=maximum({8,10,23,12,5})print(a,b,c,d);

運行結果是這樣:

當利用沒有傳回值的函數對變數進行賦值的時候,就將nil賦給該變數。

當函數調用出現在一個運算式中的時候,函數只返回第一個傳回值。

當用函數來構造table的時候,所有傳回值都會用到。

例如

e={maximum({8,10,23,12,5})}print(e[1],e[2])

可以在函數調用的時候加上一對()來確保傳回值只有一個。

總之,lua會根據情況調節函數的傳回值。

3.接受可變參數的函數

函授接受的參數個數可以是變化的,比如說遍曆數組,在c中需要傳遞數組的指標和數組的大小,在lua中用...就可以了。

function add (...)local s=0for i,v in ipairs{...} dos=s+vendreturn sendprint(add(321,32,1,34,12))

這樣就可以遍曆數組求和了。

4.具名引數

有時候你並不一定知道函數參數的順序,這時候使用具名引數就有很大作用了。

function sub(arg)return (arg.first-arg.second)endprint(sub{first=12,second=2})

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.