麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > 綜合 > 正文

Lua中的函數(shù)淺析

2024-07-21 23:04:08
字體:
供稿:網(wǎng)友

一、函數(shù)

在lua中函數(shù)的調(diào)用方式和C語言基本相同。 如print(“hello world”), z=add(x+y)。唯一的差別是,如果函數(shù)只有一個參數(shù),并且該參數(shù)是字符串或者table構(gòu)造器,那么圓括號可以省略,如print “hello world”, f{x=10,y=10}。

我對于table構(gòu)造器的理解就是它本身就是一個構(gòu)造函數(shù)或者是特殊化的結(jié)構(gòu)體。

lua為面向?qū)ο笠蔡峁┝艘粋€新的特殊語法--冒號操作符。表達(dá)式o.foo(o,x) 的另一種寫法是o:foo(x)。

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

   function add(a)
      local sum=0
      for i,v in ipairs(a) do
         sum=sum+v
      end
      return sum
   end

 

在以上聲明中,包含了函數(shù)名(add),參數(shù)列表(a),以及函數(shù)體。需要說明的是,Lua中實參和形參的數(shù)量可以不一致,一旦出現(xiàn)這種情況,Lua的處理規(guī)則等同于多重賦值,即實參多于形參,多出的部分被忽略,如果相反,沒有被初始化的形參的缺省值為nil。

1、多重返回值

 

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

function maximum(a)
   local pos=1
   local maxx=a[1]
   for i, v in ipairs(a) do
       if v>maxx then
       pos,maxx=i,v
       end
   end
   return pos,maxx
end

 

print(maximum( {1,5,2,7,3,6} ))
--輸出 4 7

 

2、變長參數(shù)

lua中同一個函數(shù)可以接受不同數(shù)量的參數(shù)(參數(shù)項為 ... )

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

function add(...)
  sum=0
  for i,v in pairs{...} do
     sum=sum+v
  end
  return sum
end

 


function mul(a,b,...)
  sum=a*b
  for i,v in pairs{...} do
     sum=sum*v
  end
  return sum
end

print(add(1,2,3,4,5))
print(add(1,2,3))
print(mul(1,2,3,4,5))

 

3、具名實參

lua中允許將多個參數(shù)合并在一個table中,當(dāng)做一個參數(shù)傳入

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

function foo(person)
  name=person.name
  age=person.age
  sex=person.sex
  ...
end

 

二、深入函數(shù)

在lua中函數(shù)和其他所有值一樣是匿名的,即它們沒有名稱,我們在操作的時候都在在操作該函數(shù)的變量。

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

a = { p = print }
a.p("Hello World")
b = print
b("Hello World")

函數(shù)聲明的方式:
復(fù)制代碼 代碼如下:

function foo(x) return 2*x  end

 

foo=function(x) return 2*x end


下面展示了匿名函數(shù)的方便性
復(fù)制代碼 代碼如下:

table.sort(tab,function(a,b) return a.id<b.id end )

 

1、closure函數(shù)(閉包函數(shù))

如果一個函數(shù)寫入另一個函數(shù)內(nèi),那么這個處于內(nèi)部的函數(shù)可以訪問外部函數(shù)的局部變量。

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

function newCounter()
    local i = 0   --"非局部變量",該變量可以被內(nèi)部的匿名函數(shù)訪問并操作
                   --其值可以用于下一次函數(shù)訪問時計算
    return function() --匿名函數(shù)
        i = i + 1
        return i
    end
end
c1 = newCounter()
c2=  newCounter()
print(c1())
print(c2()) --不同閉包的“非局部變量“是相互獨立的
print(c1())
print(c2())
--輸出結(jié)果為:
--1
--1
--2
--2

 

為了加深理解,再來看一個例子

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

function power(x)
  return function(y) --該參數(shù)為閉包變量傳入的參數(shù)
  return y^x
  end
end

 

power2=power(2) --power2,power3為閉包變量
power3=power(3)
print(power2(4))
print(power3(5))
--輸出
--16
--125

 

2、非全局函數(shù)

 

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

Lib={}
Lib.add=function(x,y) return x+y end
Lib.sub=function(x,y) return x-y end
function Lib.add(x,y) return x+y end
function Lib.sub(x,y) return x-y end

 

Lib={
      add=function(x,y) return x+y end
      sub=function(x,y) return x-y end
}

do
   local f=function(x,y) return x+y end
   ...
   f(4,5)
end


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄色18网站 | 一级美女大片 | 久久久久九九九女人毛片 | 91网站链接 | 亚洲午夜国产 | 亚洲成人在线免费观看 | 久久免费视频一区二区三区 | 亚洲第一成网站 | 亚州成人在线观看 | h视频免费在线观看 | 91色琪琪电影亚洲精品久久 | 日本中文不卡视频 | 羞羞网站在线看 | 黄色aaa视频 | 欧美一级黄| 国产免费一级淫片a级中文 99国产精品自拍 | 538任你躁在线精品视频网站 | 草b视频在线观看 | 免费一级毛片在线播放视频老 | 亚洲福利在线视频 | 高清视频一区二区 | 黄色小视频在线免费看 | 一级毛片免费一级 | 暴力肉体进入hdxxxx古装 | 欧美亚洲免费 | 久久久精彩 | 久久精品小短片 | 一级做人爱c黑人影片 | 一级在线观看 | 欧美a级在线免费观看 | 色女人在线 | jizzzzxxxxx| 日日狠狠久久偷偷四色综合免费 | 日韩视频在线视频 | 依人在线视频 | 美女网站色免费 | 国产免费网站视频 | 午色影院 | 31freehdxxxx欧美 | 亚州成人在线观看 | 在线日韩av电影 |