亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

Lua中函數的幾個特別之處探究

2024-07-21 23:04:00
字體:
來源:轉載
供稿:網友

沒想到距離上一篇基礎補充已經過了1年多了,最近準備撿回Lua,把基礎都補補,今天來聊聊Lua的函數吧~

0.環境

我突然對Lua又大感興趣的最主要原因是,Cocos Code IDE開始浮出水面了,它是Cocos2d-x官方出的一款專門針對Cocos2d-x+Lua或JS的IDE,試著用了,雖然不能說很完美,但,很值得期待。

所以,本文使用的Lua編輯器就選它了,大家就隨意吧~

1.掃盲——Lua的函數

Lua要創建和調用函數都十分簡單,如代碼:

復制代碼 代碼如下:

function mutou()
print("這絕對不是廣告:www.49028c.com");
end

這就創建了一個函數了,調用函數也十分簡單:
復制代碼 代碼如下:

mutou();

然后運行,就能看到輸出了,print也是一個函數,唉,不多嘮叨了。

 

2.掃盲——函數的參數

剛剛的mutou函數,我們修改一下參數,如代碼:

復制代碼 代碼如下:

function mutou(name, age)
print(name);
print(age);
end

 

我們給mutou添加兩個參數,一個是name,代表名字,一個是age,代表年齡。
順便一提,Lua是沒有變量類型這一說法的,變量會根據賦予的值而展現出不一樣的類型。
 
我們試試這樣調用mutou函數:

復制代碼 代碼如下:

mutou("木頭", 25);

然后運行,輸出如下:
復制代碼 代碼如下:

[LUA-print] 木頭
[LUA-print] 25

很正常,我喜歡~

 

3.海量的心——函數參數個數自適應

Lua的函數心胸比較寬廣,對于我們傳遞進去的參數,全部都會忍受,但,它會按照它的規則進行篩選。
 
繼續剛剛那個mutou函數,我們試試這樣調用:

復制代碼 代碼如下:

mutou("木頭");

少給了一個參數,但,這和C++或者Java等語言不一樣,它不會造成編譯錯誤,仍然可以正常運行。輸出如下:
復制代碼 代碼如下:

[LUA-print] 木頭
[LUA-print] nil

對于缺少的參數,它會自動用nil來代替。
 
再然后,既然可以少給參數,那自然也可以多給參數了,試試這樣調用:
復制代碼 代碼如下:

mutou("木頭", 25, "旁白", 45);

(小若:你才45歲!你全身細胞都是45歲!)
輸出如下:
復制代碼 代碼如下:

[LUA-print] 木頭
[LUA-print] 25

 

結果自然是,多出參數會被舍去。
至于這是好事還是壞事,就看是誰使用了~

4.多重返回值

沒錯,Lua似乎把我們想要的能偷懶的所有事情都給想到了,并且給實現了。

Lua的函數支持返回多個值,繼續修改mutou函數,如下:

復制代碼 代碼如下:

function mutou(name, age)
return name, age;
end

把傳進去的兩個參數又給return回來了,試試這樣調用:
復制代碼 代碼如下:

local name = mutou("木頭", 25);
print(name);

調用mutou函數,并且用一個變量保存返回值,輸出結果為:
復制代碼 代碼如下:

[LUA-print] 木頭

 
因為我們只用了一個變量來保存返回值,所以即使函數返回了兩個值,我們也只能獲取到一個,要想獲取到兩個值,就十分簡單了,如下:
復制代碼 代碼如下:

local name, age = mutou("木頭", 25);
print(name .. ":" .. age);

輸入結果如下:
復制代碼 代碼如下:

[LUA-print] 木頭:25

又順便一提,用符號“..”可以連接字符串,這里就不多說了~
 
返回值和參數一樣,如果我們嘗試用三個變量去獲取函數返回值,也不會造成編譯錯誤,如下:
復制代碼 代碼如下:

local name, age, hehe = mutou("木頭", 25);
print(name .. ":" .. age);
print(hehe);

輸入如下:
復制代碼 代碼如下:

[LUA-print] 木頭:25
[LUA-print] nil

 

對于多出的變量,會賦予nil值,雖然這不會造成編譯錯誤,但是也可能會造成運行時錯誤。

比如,用“..”符號去連接nil值,就會報錯。

5.多重返回值的特點1——必須是表達式的最后一個元素

對于有多個返回值的函數,不一定所有情況下都能返回多個值。

先來看這樣一種特別的情況,仍然是剛剛的mutou函數,我們這樣調用:

復制代碼 代碼如下:

local a, b, c = "first", mutou("木", 25);
print(a);
print(b);
print(c);

輸出結果如下:
復制代碼 代碼如下:

[LUA-print] first
[LUA-print] 木
[LUA-print] 25

沒錯,Lua的賦值語句是支持逗號表達式的(也就是用多個值給多個變量賦值),排在前面的值自然就優先賦給變量,所以變量a的值就是”first”。
不過,這不是重點~(小若:那你還說個毛線?。。?br /> 
重點是,我們把順序調換一下,如下:
復制代碼 代碼如下:

local a, b, c =  mutou("木", 25), "first";
print(a);
print(b);
print(c);

輸出結果會出乎大家的意料:
復制代碼 代碼如下:

[LUA-print] 木
[LUA-print] first
[LUA-print] nil

沒錯,mutou函數的返回值變成只有一個了,這就是函數的特點之一:如果函數的調用不是在表達式的最后一個元素,則,最多只返回一個值。
 
什么?還不夠清晰嗎?那再來舉個粒子(小若:粒子你個頭?。。?br />我們這樣調用函數…額,那個,我們繼續下一條內容。(小若:舉不出例子那你剛剛還激動個毛線?。。?p>  

6.多重返回值的特點2——強制返回一個值

某些情況下,我們可能會對于一個函數感到厭煩,沒錯,為什么你總是返回多個值??。ㄐ∪簦哼€不是你自己寫的函數嗎!)
 
如果想讓某個函數強制只返回一個值,可以這么做:

復制代碼 代碼如下:

local a, b = (mutou("木", 25));
print(a);
print(b);

輸入結果如下:
復制代碼 代碼如下:

[LUA-print] 木
[LUA-print] nil

 
我們只需要在函數調用時,把函數調用放在括號中就可以了。

 

7.名字參數/具名實參/named arguments

最后,我們來看看比較實用的一種函數參數——名字參數。

其實“名字參數”是我自己的叫法,《Lua程序設計》第二版中是稱之為“具名實參”,但我看到英文單詞以及用法之后,我還是比較傾向于稱之為“名字參數”。
 
先來問大家一個問題,我們剛剛一直在討論的mutou函數,有多少個參數,不要回去看,1秒鐘內回答~(小若:2個?。?/p>

第二個問題,mutou函數的age和name參數哪個在前哪個在后?0.001秒內回答?。ㄐ∪簦夯卮鹉銈€頭啊?。?br />  
沒錯,我們有時候并不記得一個函數的參數順序,倒底age是第一個參數呢,還是name是第二個參數?(小若:好像哪里不對…)
 
于是,具名實參就派上用場了。
我們修改一下mutou函數:

復制代碼 代碼如下:

function mutou(args)
return args.name, args.age;
end

現在mutou函數的參數變成了一個table,它要求table中包含name和age兩個值。
 
于是,我們調用mutou函數的方式就變成了這樣:
復制代碼 代碼如下:

local args = {name = "木", age = 25};
print(mutou(args));

沒錯,傳遞一個table變量給mutou函數就可以了,由于函數在取參數值的時候,是根據table的key值來獲取的,根本就不需要考慮參數順序,這就解決了我們剛剛所說的順序問題了。

 

8.結束

好了,關于函數的基礎特性,就這么多了,當然,還有一個變長參數我沒有提到,因為這好像沒什么好提的~
 
最近我在計劃堅持一件事情,那就是:晚上不寫游戲,哪怕遇到讓人興奮的Bug。
我想把晚上的時間都拿來充電,我的基本功實在是不夠用了,有點搖搖欲墜的感覺。
 
近期是計劃把《Lua程序設計》這本書過一遍,希望能堅持~
計劃是每晚花一小時看書,花一小時整理教程。
 
今天是第一天,很累,寫教程比寫游戲累多了。
有句什么話來著,永遠不要讓自己處于舒適的范圍里,好吧,堅持…
(小若:用個毛線的省略號啊!用感嘆號啊!這樣才代表你有決心…)
 
我說,小若,那為什么你最后也用了省略號…

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线国产精品| 欧美激情精品久久久久久久变态| 午夜免费日韩视频| 成人激情视频在线播放| 欧美黑人性猛交| 国产视频久久网| 色视频www在线播放国产成人| 亚洲精品一区中文字幕乱码| 亚洲第一精品夜夜躁人人躁| 国产视频久久久久久久| 97久久伊人激情网| 久久91亚洲精品中文字幕| 91精品国产九九九久久久亚洲| 欧美精品在线免费| 亚洲片在线资源| 亚洲免费伊人电影在线观看av| 日韩精品极品在线观看| 日韩av电影免费观看高清| 国产精品免费一区豆花| 亚洲欧洲自拍偷拍| 久久久国产精品x99av| 国产亚洲精品日韩| 色婷婷综合久久久久中文字幕1| 国产欧美日韩综合精品| 欧美日韩国产中文精品字幕自在自线| 亚洲无av在线中文字幕| 尤物99国产成人精品视频| 国自产精品手机在线观看视频| 国产精品国产三级国产aⅴ浪潮| 国产91在线播放| 久久久久北条麻妃免费看| 姬川优奈aav一区二区| 精品美女国产在线| 91精品视频在线| 一区二区三区在线播放欧美| 日本精品视频在线播放| 亚洲精品成人av| 91精品国产自产91精品| 亚洲精品有码在线| 精品毛片三在线观看| 久久男人的天堂| 精品国产欧美一区二区五十路| 国产日韩精品综合网站| 一二美女精品欧洲| 中文字幕亚洲情99在线| 日韩美女免费观看| 国产成人精品综合久久久| 国内偷自视频区视频综合| 日韩av三级在线观看| 日本韩国欧美精品大片卡二| 成人午夜两性视频| 久久久999成人| 日韩av电影在线播放| 国内精品模特av私拍在线观看| 国产噜噜噜噜噜久久久久久久久| 亚洲欧美色图片| 北条麻妃一区二区三区中文字幕| 亚洲欧美日韩在线一区| 91麻豆国产精品| 精品中文字幕在线| 亚洲欧美日韩一区二区在线| 国产日产欧美a一级在线| 中日韩美女免费视频网址在线观看| 亚洲成人精品在线| 国产精品福利小视频| 国产精品露脸av在线| 日韩精品高清在线观看| 性色av一区二区三区在线观看| 欧美激情中文字幕乱码免费| 日韩成人激情影院| 国内免费久久久久久久久久久| 国产免费成人av| 国产色综合天天综合网| 国产精品视频999| 国产一区二区日韩精品欧美精品| 国内精品国产三级国产在线专| 日本久久中文字幕| 亚洲精品成a人在线观看| 亚洲日本成人网| 视频一区视频二区国产精品| 欧美精品久久久久久久久| 久久久女人电视剧免费播放下载| 国内精品免费午夜毛片| 91经典在线视频| 日韩精品在线电影| 亚洲精品视频在线播放| 日韩中文字幕久久| 亚洲网址你懂得| 欧美视频一区二区三区…| 精品国产鲁一鲁一区二区张丽| 亚洲男人天堂视频| 国产伦精品一区二区三区精品视频| 午夜剧场成人观在线视频免费观看| 欧美午夜片在线免费观看| 亚洲自拍av在线| 国产mv免费观看入口亚洲| 国产热re99久久6国产精品| 日韩精品999| 国产精品自产拍在线观看中文| 欧美亚洲视频在线看网址| 中文字幕亚洲一区二区三区| 国产精品毛片a∨一区二区三区|国| 欧美性一区二区三区| 精品美女久久久久久免费| 欧美精品在线看| 一区二区av在线| 国产亚洲激情视频在线| 日韩欧美在线视频免费观看| yw.139尤物在线精品视频| 国产日韩精品在线| 黑人巨大精品欧美一区二区一视频| 91中文字幕在线观看| 91视频九色网站| 久久av资源网站| 日韩精品免费在线视频观看| 777精品视频| 在线电影中文日韩| 亚洲精品99久久久久中文字幕| 亚洲日本成人女熟在线观看| 亚洲美女中文字幕| 日韩av中文字幕在线播放| 久久久女人电视剧免费播放下载| 国产久一一精品| 国产丝袜精品第一页| 97超级碰在线看视频免费在线看| 日韩av成人在线观看| 欧美成人国产va精品日本一级| 成人中文字幕+乱码+中文字幕| 一本大道亚洲视频| 久久九九有精品国产23| 黑人狂躁日本妞一区二区三区| 情事1991在线| 欧美日韩国产精品一区二区不卡中文| 亚洲欧美第一页| 人人做人人澡人人爽欧美| 欧美日韩亚洲国产一区| 一区二区亚洲精品国产| 精品久久久久久久久中文字幕| 亚洲欧美精品一区| 97国产真实伦对白精彩视频8| 日本精品久久久| 国产精品视频永久免费播放| 日韩av中文字幕在线| 成人黄色免费看| 国产精品免费久久久久久| 日韩国产高清视频在线| 欧美精品videosex牲欧美| 国产精品www| 26uuu亚洲伊人春色| 日韩成人中文字幕| 亚洲91av视频| 亚洲激情成人网| 久久久久久亚洲精品| 国产精品久久久久久久久久久久久| 日本精品视频网站| 日韩在线观看网址| 精品久久久久久久久久久久| 亚洲老头老太hd| 精品国产鲁一鲁一区二区张丽| 欧美性感美女h网站在线观看免费| 亚洲欧美国产另类| 欧美性猛交xxxx免费看漫画| 91国产在线精品| 久久久欧美一区二区|