婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識(shí)庫 > Lua中函數(shù)與面向?qū)ο缶幊痰幕A(chǔ)知識(shí)整理

Lua中函數(shù)與面向?qū)ο缶幊痰幕A(chǔ)知識(shí)整理

熱門標(biāo)簽:艾比利外呼系統(tǒng) 昆明電話外呼系統(tǒng)好么 外呼系統(tǒng)一天耗費(fèi)多少流量 免費(fèi)門店地圖標(biāo)注注冊(cè)入駐 杞縣地圖標(biāo)注app 海口智能語音電銷機(jī)器人好用嗎 電話機(jī)器人每天搜索多少次 陜西便宜電銷機(jī)器人軟件 衡水外呼線路解決

函數(shù)
1. 基礎(chǔ)知識(shí)
調(diào)用函數(shù)都需要寫圓括號(hào),即使沒有參數(shù),但有一種特殊例外:函數(shù)若只有一個(gè)參數(shù)且參數(shù)是字面字符串或table構(gòu)造式,則圓括號(hào)可有可無,如dofile 'a.lua',f{x=10, y=20}。

Lua為面向?qū)ο笫降恼{(diào)用提供冒號(hào)操作符的特殊語法,如o.foo(o, x)等價(jià)于o:foo(x)。和Javascript類似,調(diào)用函數(shù)時(shí)提供的實(shí)參數(shù)量可以與形參數(shù)量不同,若實(shí)參多了則舍棄,不足則多余的形參初始化為nil。

1.1 多重返回值

Lua允許函數(shù)返回多個(gè)結(jié)果,函數(shù)返回如return max, index,接收如s, e = string.find("hello Lua world", "Lua")。如果一個(gè)函數(shù)調(diào)用不是一系列表達(dá)式的最后一個(gè)元素,則只產(chǎn)生一個(gè)值:

function foo() return "a", "b" end
x, y = foo(), 20  -- x="a", y=20(foo的第二個(gè)返回值被丟棄)
print(foo() .. "x")  -- 輸出ax,這是因?yàn)楫?dāng)函數(shù)出現(xiàn)在一個(gè)表達(dá)式中時(shí),Lua會(huì)將其返回值數(shù)量調(diào)整為1

另外,只有當(dāng)一個(gè)函數(shù)調(diào)用作為最后一個(gè)元素時(shí),返回值才不會(huì)被調(diào)整,在其他位置都會(huì)被調(diào)整為1個(gè),如t = {foo2()}則t={“a”, “b”},t = {foo2(), 4}則t={“a”, 4}。

特殊函數(shù)unpack接受一個(gè)數(shù)組作為參數(shù),并從下標(biāo)1開始返回該數(shù)組的所有元素,如a, b = unpack({10, 20, 30}),則30被丟棄。unpack的一項(xiàng)重要用途體現(xiàn)在“泛型調(diào)用”機(jī)制中。

1.2 變長參數(shù)

函數(shù)參數(shù)表中3個(gè)點(diǎn)(…)表示該函數(shù)可接受不同數(shù)量的實(shí)參。在Lua 5.0中,沒有提供“…”表達(dá)式,如果要遍歷變長參數(shù),可以訪問函數(shù)內(nèi)隱含的局部變量arg。如果還有固定參數(shù),則必須放在變長參數(shù)之前。

2. 高級(jí)主題
2.1 closure閉合函數(shù)

和Javascript的閉包基本是一個(gè)東西,此處不再贅述。從技術(shù)上說,Lua中只有closure,而不存在“函數(shù)”,因?yàn)楹瘮?shù)本身就是一種特殊的closure。closure的應(yīng)用很廣泛,如用于高階函數(shù)的參數(shù)、為GUI工具包創(chuàng)建回調(diào)、重定義函數(shù)并在新實(shí)現(xiàn)中調(diào)用舊實(shí)現(xiàn)、創(chuàng)建“沙盒”安全運(yùn)行環(huán)境等等。

2.2 非全局的函數(shù)

大部分Lua庫都采用了將函數(shù)存儲(chǔ)在table中的機(jī)制(如io.read,math.sin),例如下面采用了三種方式來定義table的成員函數(shù):

MathLib = {
  plus = function(x, y) return x + y end
}
MathLib.minus = function(x, y) return x - y end
function MathLib.multiply(x, y) return x * y end

局部函數(shù)的定義:

local f = function(參數(shù)>) 函數(shù)體> end
local function f(參數(shù)>) 函數(shù)體> end -- Lua提供的語法糖

**注意如果定義遞歸函數(shù),不能使用上面第一種定義方式(因?yàn)樵诤瘮?shù)體調(diào)用f時(shí),f尚未定義完畢),使用第二種“語法糖”則沒問題;或者使用“前向聲明”,先local f再f = function ...這樣定義。

2.3 正確的尾調(diào)用

當(dāng)一個(gè)函數(shù)調(diào)用時(shí)另一個(gè)函數(shù)的最后一個(gè)動(dòng)作時(shí),該調(diào)用算是一條“尾調(diào)用”,例如function f(x) return g(x) end。由于在尾調(diào)用后程序不要保存任何關(guān)于該函數(shù)的棧信息,所以遞歸調(diào)用不會(huì)耗費(fèi)棧空間,可以遞歸調(diào)用無數(shù)次。有一些看似是“尾調(diào)用”的代碼,其實(shí)都違背了這條準(zhǔn)則:

function f(x) g(x) end  -- 調(diào)用g后,f沒有立即返回,還需要丟棄g返回的臨時(shí)結(jié)果
function f(x) return g(x) + 1  -- 還要做一次加法
function f(x) return x or g(x)  -- 必須調(diào)整為一個(gè)返回值

所以,只有形如return func>(args>)這樣的調(diào)用形式才算是尾調(diào)用。

面向?qū)ο缶幊?br /> Lua中的table就是一種對(duì)象,因?yàn)樗蛯?duì)象一樣可以擁有狀態(tài),也擁有一個(gè)獨(dú)立于其值的標(biāo)識(shí)(一個(gè)self),也和對(duì)象一樣具有獨(dú)立于創(chuàng)建者的生命周期。但是Lua中沒有類的概念,只能用元表來實(shí)現(xiàn)原型,用原型來模擬類和繼承等面向?qū)ο筇匦浴1疚膶⒔榻BLua關(guān)于面向?qū)ο缶幊痰膬?nèi)容。

1 self與冒號(hào)語法

使用self參數(shù)是所有面向?qū)ο笳Z言的一個(gè)核心,Lua只需使用冒號(hào)語法,就能隱藏該參數(shù),例如下面兩段代碼是等價(jià)的。

Account = {balance=0}
funtion Account.withdraw(self, v)
  self.balance = self.balance - v
end
a1 = Account; Account = nil
a1.withdraw(a1, 100.0) -- 注意這是可以運(yùn)行的

function Account:withdraw(v)
  self.balance = self.balance - v
end
a2 = Account
a2:withdraw(100.0) -- 省略了a2參數(shù)傳入

2 類的編寫

在一些基于原型的語言中,對(duì)象是沒有類型的,但每個(gè)對(duì)象都有一個(gè)原型。原型是一種常規(guī)的對(duì)象,當(dāng)其他對(duì)象遇到一個(gè)未知操作時(shí),原型會(huì)先查找它。在這種語言中要表示一個(gè)類,只需創(chuàng)建一個(gè)專用做其他對(duì)象的原型。Lua中實(shí)現(xiàn)原型很簡單,只需用元表的__index來實(shí)現(xiàn)繼承。

(當(dāng)訪問一個(gè)table中不存在的字段key時(shí),一般得到結(jié)果為nil。事實(shí)上,訪問會(huì)促使解釋器去查找一個(gè)叫__index的元方法,如果沒有這個(gè)元方法,則訪問結(jié)果如前述的nil,否則由這個(gè)元方法來提供結(jié)果。元方法除了是一個(gè)函數(shù),還可以是一個(gè)table,如果是table則直接返回該table中key對(duì)應(yīng)的內(nèi)容。)

如果有兩個(gè)對(duì)象a和b,要讓b作為a的一個(gè)原型,只需setmetatable(a, {__index=b})。a就會(huì)在b中查找它沒有的操作。

function Account:new(o)
  o = o or {} -- 如果用戶沒有提供table,則創(chuàng)建一個(gè)
  setmetatable(o, self)
  self.__index = self
  return o
end

當(dāng)調(diào)用a = Account:new{balance = 0}時(shí),a會(huì)將Account(函數(shù)中的self)作為其元表。當(dāng)調(diào)用a:withdraw(100.0)時(shí),Lua無法在table a中找到條目withdraw,則進(jìn)一步搜索元表的__index條目,即getmetatable(a).__index.withdraw(a, 100.0)。由于new方法中做了self.__index = self,所以上面的表達(dá)式又等價(jià)于Account.withdraw(a, 100.0),這樣就傳入了a作為self參數(shù),又調(diào)用了Account類的withdraw函數(shù)。這種創(chuàng)建對(duì)象的方式不僅可以作用于方法,還可以作用于所有其他新對(duì)象中沒有的字段。

3 繼承

現(xiàn)在要從Account類派生出一個(gè)子類SpecialAccount(以使客戶能夠透支),只需:

SpecialAccount = Account:new()
s = SpecialAccount:new{limit=1000.00}

SpecialAccount從Account繼承了new,當(dāng)執(zhí)行SpecialAccount:new時(shí),其self參數(shù)為SpecialAccount,因此s的元表為SpecialAccount。當(dāng)調(diào)用s不存在的字段時(shí),會(huì)向上查找,也可以編寫新的重名方法覆蓋父類方法。

4 多重繼承

上面介紹中為__index元方法賦值一個(gè)table實(shí)現(xiàn)了單繼承,如果要實(shí)現(xiàn)多重繼承,可以讓__index字段成為一個(gè)函數(shù),在該函數(shù)中搜索多個(gè)基類的方法字段。由于這種搜索具有一定復(fù)雜性,多重繼承的性能不如單一繼承。還有一種改進(jìn)性能的簡單做法是將繼承的方法復(fù)制到子類中,但這種做法的缺點(diǎn)是當(dāng)系統(tǒng)運(yùn)行后就較難修改方法的定義,因?yàn)檫@些修改不會(huì)沿著繼承體系向下傳播。

5 私密性

Lua在設(shè)計(jì)對(duì)象時(shí),沒有提供私密性機(jī)制(private),但其各種元機(jī)制使得程序員可以模擬對(duì)象的訪問控制。這種實(shí)現(xiàn)不常用,因此只做基本的了解:通過兩個(gè)table來表示一個(gè)對(duì)象,一個(gè)用來保存對(duì)象的狀態(tài),一個(gè)用于對(duì)象的操作(即接口)。

function newAccount(initialBalance)
  local self = {balance = initialBalance}
  local withdraw = function(v)
    self.balance = self.balance -v
  end
  return {
    withdraw = withdraw
  }
end

通過閉包的方式,將具有私密性的字段(如balance)保存在self table中,并只公開了withdraw接口,這樣就能實(shí)現(xiàn)私密性機(jī)制。

您可能感興趣的文章:
  • Lua中的string庫(字符串函數(shù)庫)總結(jié)
  • Lua中的函數(shù)(function)、可變參數(shù)、局部函數(shù)、尾遞歸優(yōu)化等實(shí)例講解
  • Lua中的一些常用函數(shù)庫實(shí)例講解
  • Lua中的模塊與module函數(shù)詳解
  • Lua中的函數(shù)知識(shí)總結(jié)
  • Lua字符串庫中的幾個(gè)重點(diǎn)函數(shù)介紹
  • Lua的table庫函數(shù)insert、remove、concat、sort詳細(xì)介紹
  • Lua中的常用函數(shù)庫匯總
  • Lua中的面向?qū)ο缶幊淘斀?/li>
  • Lua面向?qū)ο笾惡屠^承
  • Lua面向?qū)ο笾嘀乩^承、私密性詳解
  • Lua面向?qū)ο缶幊虒W(xué)習(xí)筆記

標(biāo)簽:南京 海口 營口 西寧 昌都 宿遷 泰安 臨滄

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Lua中函數(shù)與面向?qū)ο缶幊痰幕A(chǔ)知識(shí)整理》,本文關(guān)鍵詞  Lua,中,函數(shù),與,面向,對(duì)象,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Lua中函數(shù)與面向?qū)ο缶幊痰幕A(chǔ)知識(shí)整理》相關(guān)的同類信息!
  • 本頁收集關(guān)于Lua中函數(shù)與面向?qū)ο缶幊痰幕A(chǔ)知識(shí)整理的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲欧美日韩人成在线播放| 亚洲一区日韩精品中文字幕| 精品在线一区二区| 国产精品网友自拍| 欧美一区二区三区小说| 国产麻豆精品一区二区| 欧美一区二区三区小说| 欧美视频中文一区二区三区在线观看| 国产福利精品导航| 国内精品免费在线观看| 亚洲欧美日韩国产手机在线 | 一区二区三区四区视频精品免费 | 免费成人av资源网| 亚洲激情自拍视频| 久久精品欧美一区二区三区不卡 | 亚洲高清免费视频| 久久精品亚洲国产奇米99| 91精品国产综合久久久久久久| 国产成人午夜99999| 成人app软件下载大全免费| 免费观看在线综合色| 亚洲成人中文在线| 日韩美女一区二区三区四区| 欧美人牲a欧美精品| 精品视频免费看| 91毛片在线观看| 成人开心网精品视频| 国产91精品一区二区麻豆亚洲| 国产伦精一区二区三区| 国产大陆精品国产| a级高清视频欧美日韩| 91在线云播放| 欧美三级视频在线播放| 91在线观看视频| 久久电影国产免费久久电影| 国产一区在线精品| 国产一区二区视频在线| 国模无码大尺度一区二区三区| 精品裸体舞一区二区三区| 成人一区二区三区| 99国产精品99久久久久久| 国产成人啪免费观看软件| 狠狠色丁香婷婷综合| 国产精品夜夜嗨| 国产999精品久久久久久| 波多野结衣一区二区三区 | 3d成人动漫网站| 精品国产露脸精彩对白| 久久久www免费人成精品| 久久综合九色综合97婷婷女人 | 最近中文字幕一区二区三区| 亚洲男人的天堂在线观看| 午夜私人影院久久久久| 久久99精品久久久| 91尤物视频在线观看| 欧美精品一级二级三级| 一区二区三区免费看视频| 亚洲乱码国产乱码精品精小说| 夜夜嗨av一区二区三区中文字幕 | 亚洲日本在线天堂| 奇米精品一区二区三区四区| 成人性生交大片免费看在线播放| 在线免费观看视频一区| 久久日韩粉嫩一区二区三区| 亚洲最大色网站| 丁香婷婷深情五月亚洲| 欧美日韩的一区二区| 日韩欧美在线网站| 樱桃国产成人精品视频| 国产福利电影一区二区三区| 欧美视频一区二区三区四区| 中文无字幕一区二区三区| 狠狠狠色丁香婷婷综合激情| 欧美无砖专区一中文字| 制服.丝袜.亚洲.中文.综合| 国产日韩欧美制服另类| 性做久久久久久免费观看欧美| 国产在线精品国自产拍免费| 欧美高清www午色夜在线视频| 国产精品久久久久久久第一福利 | 亚洲视频图片小说| 国内精品伊人久久久久影院对白| www.av精品| 久久久久国色av免费看影院| 亚洲国产美国国产综合一区二区| 国产激情一区二区三区桃花岛亚洲| 色屁屁一区二区| 欧美韩日一区二区三区四区| 偷拍一区二区三区| 欧美日韩夫妻久久| 日韩电影一区二区三区四区| 欧美精品乱码久久久久久按摩 | 51精品国自产在线| 亚洲一区二区三区美女| 91啪亚洲精品| 亚洲人成在线播放网站岛国| 成人aa视频在线观看| 亚洲色图制服诱惑 | 777精品伊人久久久久大香线蕉| 欧美一区二区免费观在线| 亚洲综合色噜噜狠狠| 色天天综合色天天久久| 欧美国产精品一区二区三区| 亚洲成人综合视频| 欧美色视频在线| 亚洲一区二区视频| 欧美三级电影在线看| 亚洲超碰97人人做人人爱| www.激情成人| 一区二区三区丝袜| 欧美色国产精品| 日本成人在线不卡视频| 69堂国产成人免费视频| 麻豆一区二区三区| 久久精品网站免费观看| www.日本不卡| 亚洲一区二区综合| 欧美精品vⅰdeose4hd| 视频一区视频二区中文| 欧美一二三四在线| 国产伦精品一区二区三区免费 | 国产免费观看久久| 成人av电影免费在线播放| 亚洲精品美腿丝袜| 欧美日韩国产在线观看| 久久激情综合网| 欧美国产成人在线| 色婷婷国产精品久久包臀| 日产国产欧美视频一区精品| 久久久青草青青国产亚洲免观| 国产乱理伦片在线观看夜一区 | 欧美性三三影院| 免费三级欧美电影| 中文字幕在线不卡| 欧美一区二区三区人| jlzzjlzz亚洲日本少妇| 日韩**一区毛片| 国产精品嫩草影院com| 欧美丝袜第三区| 国产乱色国产精品免费视频| 亚洲黄色录像片| 欧美videofree性高清杂交| 99久久99久久免费精品蜜臀| 乱中年女人伦av一区二区| 国产精品卡一卡二卡三| 91黄视频在线| 国产成人8x视频一区二区| 亚洲va韩国va欧美va| 国产精品国产三级国产aⅴ原创| 91蜜桃在线免费视频| 国产一区啦啦啦在线观看| 亚洲精品日韩专区silk| 日韩女优av电影| 欧美日韩在线播放一区| 波多野结衣中文字幕一区二区三区| 免费成人在线网站| 亚洲第一激情av| 国产精品久久久久久久久免费樱桃| 精品久久久久久久久久久久包黑料| 91黄色免费看| 91视频精品在这里| 国产精品一区在线观看你懂的| 日本美女一区二区三区视频| 亚洲精品国产精华液| 中文字幕五月欧美| 欧美国产精品v| 欧美国产精品一区二区三区| 久久久综合视频| 精品国产91洋老外米糕| 欧美一级搡bbbb搡bbbb| 欧美日韩精品一区二区三区蜜桃| 91一区二区在线观看| 尤物在线观看一区| 亚洲精品乱码久久久久久黑人| 中文字幕一区二区三区视频| 日韩欧美一区二区免费| 欧美亚洲愉拍一区二区| 在线一区二区视频| 色综合网色综合| 成人av在线网| 成人免费视频网站在线观看| 国产一区二区三区精品欧美日韩一区二区三区 | 制服丝袜在线91| 成人影视亚洲图片在线| 轻轻草成人在线| 久久久久国产精品麻豆ai换脸| 丝袜亚洲另类欧美综合| 亚洲丝袜精品丝袜在线| 亚洲欧洲韩国日本视频| 久久久亚洲欧洲日产国码αv| 666欧美在线视频| 欧美影院午夜播放| 欧美日韩一区三区| 欧美三区在线视频| 欧美精品vⅰdeose4hd| 日韩一级完整毛片| 精品国产乱码久久久久久1区2区| 国产99久久久久| av在线一区二区| 日本韩国精品在线|