佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > Lua中的函數(shù)精講筆記

Lua中的函數(shù)精講筆記

熱門標(biāo)簽:鐵路電話系統(tǒng) AI電銷 服務(wù)外包 百度競價排名 網(wǎng)站排名優(yōu)化 Linux服務(wù)器 地方門戶網(wǎng)站 呼叫中心市場需求

函數(shù)的用途:

1.完成指定的任務(wù),這種情況下作為調(diào)用語句使用。
2.計算并返回值,這種情況下,函數(shù)作為賦值語句的表達(dá)式使用。

函數(shù)的參數(shù)為空,必須使用()表示函數(shù)調(diào)用。例外:當(dāng)函數(shù)只有一個參數(shù),并且這個參數(shù)是字符串或表構(gòu)造時,()是可選的。
lua提供了面向?qū)ο笳{(diào)用函數(shù)的語法
o:foo(x)與o.f(o,x)是等價的。

lua函數(shù)的實(shí)參與形參的匹配與賦值語句類似,多余部分被忽略,缺少部分nil補(bǔ)足。

lua函數(shù)可以返回多個值,return后列出要返回值的列表即可返回多值

復(fù)制代碼 代碼如下:

s, e = string.find("hello lua", "lua")

那么,lua是如何調(diào)整函數(shù)返回值的個數(shù)來適應(yīng)調(diào)用環(huán)境的呢?
1. use as statement,所以返回值被忽略。
2. use as expression

1).當(dāng)作為表達(dá)式最后一個參數(shù)或僅有的一個參數(shù)時,根據(jù)變量個數(shù),函數(shù)盡可能多地返回多個值,不足補(bǔ)nil,超出舍去。
2).其他情況函數(shù)調(diào)用返回第一個值(如果無返回值為nil)
3).函數(shù)調(diào)用作為函數(shù)參數(shù)被調(diào)用時,和多值賦值相同
4).函數(shù)調(diào)用在表構(gòu)造中初始化時,和多值賦值相同
5).return f(); f()返回所有值??梢允褂美ㄌ枏?qiáng)制返回一個值return (f())

c語言中,可以使用函數(shù)指針來調(diào)用可變的函數(shù),可以聲明參數(shù)可變的函數(shù),但不能兩者同時可變。

Lua可以這樣來調(diào)用可變參數(shù)的可變函數(shù):f(unpack(a))

unpack接受一個數(shù)組作為輸入?yún)?shù),返回數(shù)組所有的元素。注意是數(shù)字,返回ipair遍歷結(jié)果

復(fù)制代碼 代碼如下:

f = string.find
a = {"hello lua", "lua"}
print(f(unpack(a)))

可變參數(shù)使用...表示,Lua將可變參數(shù)放在arg的表中,含有一個域n表示參數(shù)的個數(shù)
(5.1+:用...取代了arg。如:

復(fù)制代碼 代碼如下:

function printArgLen(...)
print(select("#", ...))
end
)

function select(n, ...)
     return arg[n]
end


給函數(shù)參數(shù)命名:可以把表作為函數(shù)的唯一參數(shù)來實(shí)現(xiàn)命名參數(shù)的功能。
復(fù)制代碼 代碼如下:

rename {old="temp.lua", new="temp1.lua"}
function rename(arg)
     os.rename(arg.old, arg.new)
end

當(dāng)參數(shù)比較多,或容易混淆時,可以采用命名參數(shù)。


Lua中的函數(shù)帶有詞法定界的第一類值。

第一類值: 在Lua中,函數(shù)和其他值(數(shù)值,字符串)一樣,函數(shù)可以被存放在變量中,也存放在表中, 可以作為函數(shù)的參數(shù),還可以作為函數(shù)的返回值。
詞法定界:被嵌套的函數(shù)可以訪問他外部函數(shù)的變量。

lua的函數(shù)也可以是匿名的,當(dāng)我們提到函數(shù)名時,實(shí)際上是說一個指向函數(shù)的變量。

閉包

詞法界定加上第一類函數(shù)是一個功能強(qiáng)大的概念。

復(fù)制代碼 代碼如下:

function sortbygrade(names, grades)
     table.sort(names, function(n1,n2)
          return grades[n1]>grades[n2]
     end)
end

在匿名函數(shù)內(nèi)部grades稱為是外部的局部變量或upvalue

閉包在上下文環(huán)境中提供很有用的功能??勺鳛楦呒壓瘮?shù)的參數(shù),可作為函數(shù)嵌套的函數(shù)(比如返回一個閉包),可以作為回調(diào)函數(shù)。利用閉包可以重新定義某個函數(shù),當(dāng)別人調(diào)用某個函數(shù)時,調(diào)用到自己定義的做了安全檢查的函數(shù),從而創(chuàng)建了一個安全的環(huán)境(沙箱)

復(fù)制代碼 代碼如下:

do
     local oldopen = io.open
     io.open = function(f,m)
          if access_ok(f,m) then
               return oldopen(f,m)
          else
               return nil, "access denied"
          end
     end
end

非全局函數(shù)

函數(shù)作為table的域(大部分lua庫函數(shù)使用這種機(jī)制實(shí)現(xiàn)的。如io.read,math.sin)
有3種語法方式:
1.

復(fù)制代碼 代碼如下:

lib = {}
lib.foo = function(x,y) return x+y end

2.
復(fù)制代碼 代碼如下:

lib = {foo = function(x,y)return x+y end}

3.
復(fù)制代碼 代碼如下:

lib = {}
function lib.foo(x,y)
     return x+y
end

(完)

您可能感興趣的文章:
  • Lua中的函數(shù)知識總結(jié)
  • Lua中的一些常用函數(shù)庫實(shí)例講解
  • Lua字符串庫中的幾個重點(diǎn)函數(shù)介紹
  • Lua中的string庫(字符串函數(shù)庫)總結(jié)
  • Lua中讓回調(diào)函數(shù)支持回調(diào)對象方法的解決方法

標(biāo)簽:黃山 崇左 仙桃 湘潭 蘭州 衡水 湖南 銅川

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Lua中的函數(shù)精講筆記》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    四川省| 奈曼旗| 子长县| 大丰市| 将乐县| 宽甸| 安阳县| 右玉县| 赤城县| 楚雄市| 龙岩市| 镇沅| 贵港市| 莱阳市| 上思县| 镇雄县| 唐山市| 海盐县| 巫溪县| 甘谷县| 葵青区| 凉山| 麻阳| 祁连县| 铜川市| 灵台县| 西昌市| 汝州市| 彭泽县| 永清县| 西和县| 云梦县| 棋牌| 福泉市| 桐柏县| 常州市| 广宗县| 茶陵县| 冷水江市| 鄂尔多斯市| 板桥市|