lua函數精講(二)

來源:互聯網
上載者:User

標籤:lua   閉包   

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


第一類值: 在Lua中,函數和其他值(數值,字串)一樣,函數可以被存放在變數中,也存放在表中, 可以作為函數的參數,還可以作為函數的返回值。詞法定界:被嵌套的函數可以訪問他外部函數的變數。
lua的函數也可以是匿名的,當我們提到函數名時,實際上是說一個指向函數的變數。
閉包詞法界定加上第一類函數是一個功能強大的概念。function sortbygrade(names, grades)     table.sort(names, function(n1,n2)          return grades[n1]>grades[n2]     end)end在匿名函數內部grades稱為是外部的局部變數或upvalue
閉包在上下文環境中提供很有用的功能。可作為進階函數的參數,可作為函數嵌套的函數(比如返回一個閉包),可以作為回呼函數。利用閉包可以重新定義某個函數,當別人調用某個函數時,調用到自己定義的做了安全檢查的函數,從而建立了一個安全的環境(沙箱)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     endend
非全域函數函數作為table的域(大部分lua庫函數使用這種機制實現的。如io.read,math.sin)有3種文法方式:
1.lib = {}lib.foo = function(x,y) return x+y end2.lib = {foo = function(x,y)return x+y end}3.lib = {}function lib.foo(x,y)     return x+y

end

(完)

lua函數精講(二)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.