最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Lua中函數(shù)的幾個特別之處探究

 更新時間:2014年09月13日 09:55:41   作者:笨木頭  
這篇文章主要介紹了Lua中函數(shù)的幾個特別之處探究,本文講解了Lua的函數(shù)創(chuàng)建、函數(shù)的參數(shù)、函數(shù)參數(shù)個數(shù)自適應、函數(shù)多重返回值等內(nèi)容,需要的朋友可以參考下

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

0.環(huán)境

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

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

1.掃盲——Lua的函數(shù)

Lua要創(chuàng)建和調(diào)用函數(shù)都十分簡單,如代碼:

復制代碼 代碼如下:

function mutou()
print("這絕對不是廣告:m.fzitv.net");
end

這就創(chuàng)建了一個函數(shù)了,調(diào)用函數(shù)也十分簡單:
復制代碼 代碼如下:

mutou();

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

2.掃盲——函數(shù)的參數(shù)

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

復制代碼 代碼如下:

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

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

復制代碼 代碼如下:

mutou("木頭", 25);

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

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

很正常,我喜歡~

3.海量的心——函數(shù)參數(shù)個數(shù)自適應

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

復制代碼 代碼如下:

mutou("木頭");

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

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

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

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

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

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

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

4.多重返回值

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

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

復制代碼 代碼如下:

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

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

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

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

[LUA-print] 木頭

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

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

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

[LUA-print] 木頭:25

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

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

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

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

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

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

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

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

先來看這樣一種特別的情況,仍然是剛剛的mutou函數(shù),我們這樣調(diào)用:

復制代碼 代碼如下:

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

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

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

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

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

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

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

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

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

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

復制代碼 代碼如下:

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

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

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

 
我們只需要在函數(shù)調(diào)用時,把函數(shù)調(diào)用放在括號中就可以了。

7.名字參數(shù)/具名實參/named arguments

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

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

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

復制代碼 代碼如下:

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

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

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

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

8.結束

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

相關文章

  • Lua中編譯執(zhí)行代碼相關的函數(shù)詳解

    Lua中編譯執(zhí)行代碼相關的函數(shù)詳解

    這篇文章主要介紹了Lua中編譯執(zhí)行代碼相關的函數(shù)詳解的相關資料,需要的朋友可以參考下
    2015-04-04
  • Lua語言新手簡單入門教程

    Lua語言新手簡單入門教程

    這篇文章主要給大家介紹的是關于Lua語言新手入門的簡單教程,文中通過示例代碼一步步介紹的非常詳細,對各位新手們的入門提供了一個很方便的教程,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2018-03-03
  • Redis教程(三):List數(shù)據(jù)類型

    Redis教程(三):List數(shù)據(jù)類型

    這篇文章主要介紹了Redis教程(三):List數(shù)據(jù)類型,本文講解了List數(shù)據(jù)類型概述、相關命令列表、命令示例、鏈表結構的小技巧等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Lua學習筆記之表和函數(shù)

    Lua學習筆記之表和函數(shù)

    這篇文章主要介紹了Lua學習筆記之表和函數(shù),本文在代碼中使用大量注釋講解了Lua的表和函數(shù)的使用,需要的朋友可以參考下
    2014-09-09
  • Lua教程(四):函數(shù)詳解

    Lua教程(四):函數(shù)詳解

    這篇文章主要介紹了Lua教程(四):函數(shù)詳解,本文講解了多重返回值、變長參數(shù)、具名實參、閉合函數(shù)、匿名函數(shù)、非全局函數(shù)等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Lua腳本語言概述

    Lua腳本語言概述

    這篇文章主要介紹了Lua腳本語言概述,本文講解了Lua是什么、Lua語言的特性、Lua的使用范圍、Lua的基本內(nèi)容、Lua虛擬機等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • ubuntu 14.04下熟悉lua的語法

    ubuntu 14.04下熟悉lua的語法

    擺在本人目前來說最大的困難就是迅速熟悉Lua語言,后續(xù)的一切工作才有可能,所以必須現(xiàn)在電腦上安裝好Lua開發(fā)環(huán)境,之后program with Lua,我們先來熟悉下lua的語法吧。
    2015-04-04
  • lua中賦值類型代碼詳解

    lua中賦值類型代碼詳解

    本文主要給大家介紹了lua中解析復制類型代碼的過程,非常的細致全面,有需要的小伙伴可以參考下
    2015-05-05
  • Lua教程(二十二):userdata

    Lua教程(二十二):userdata

    這篇文章主要介紹了Lua教程(二十二):userdata,這里我們通過一個簡單完整的示例來學習一下Lua中userdata的使用方式,需要的朋友可以參考下
    2015-04-04
  • 在Mac OS中安裝Lua的教程

    在Mac OS中安裝Lua的教程

    這篇文章主要介紹了在Mac OS中安裝Lua的教程,盡管基于Unix的Mac OS并沒有集成Lua解釋器,但安裝起來依然super easy:)需要的朋友可以參考下
    2015-07-07

最新評論

全南县| 吴堡县| 莒南县| 会理县| 赤水市| 宁陵县| 论坛| 惠州市| 当雄县| 封丘县| 泾川县| 宁化县| 朔州市| 石河子市| 泗阳县| 扎囊县| 东乡族自治县| 南京市| 商南县| 永修县| 益阳市| 河间市| 邵武市| 饶平县| 饶阳县| 外汇| 德化县| 土默特右旗| 双峰县| 青海省| 将乐县| 昌黎县| 肃北| 吐鲁番市| 宁陕县| 卓尼县| 延吉市| 绵竹市| 广平县| 靖江市| 富源县|