1. 程式人生 > >lua的閉包

lua的閉包

foo 程序結構 第一個 定義 結構 print -- 變量 匿名

什麽是閉包呢?

其實我也不知道什麽是閉包,更不知道為什麽第一個給這種程序結構起了一個“閉包”的名字是基於什麽。。。就像遞歸一樣。。。感覺逼格好高(懵逼。。流鼻涕)

好了,不管這麽多,只要知道下面這種程序結構就叫閉包

function foo()

  local i = 0

  function foo2()

    i = i + 1

  return i

  end

  return foo2

end

這個函數裏面定義了一個局部變量,然後定義一個嵌套函數修改這個局部變量,返回這個變量,最後把嵌套函數返回出去

結果就是,只要有變量引用了返回出來的嵌套函數,那麽裏面定義的局部變量不會消失,挺神奇的

c = foo()

print(c())

print(c())

輸出

1

2

還可以這麽寫

function foo()

  local i = 0

  return function() i = i + 1 return i end --匿名的

end

c = foo()

print(c())

print(c())

定義一個函數,一個嵌套函數,在嵌套函數裏面更改父函數變量的值,返回變量。返回嵌套函數。

c = foo()那麽,c就是那個返回的函數,再調用c(),返回運算後的變量

lua的閉包