gpt4 book ai didi

LUA中的闭包(closure)浅析

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章LUA中的闭包(closure)浅析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

之前对closure一知半解,在网上也找不到一篇文章能把它说清楚,今天好像第一次对它有点清晰的了解 了,写个BLOG记念一下 。

lua的函数是一种 First-Class Value 的东西, 到底是啥? 就是它们与传统类型的变值没啥区别, 可以 存到一个变量中, 可以 存到table中, 可以 作为实参传递给其它函数, 可以 作为其它函数的返回值. 。

它们还具有特定的词法域(Lexical Scoping), 也就是说, 一个函数可以嵌套在另一个函数中, 内部的函数可以访问外部函数中的变量. 如下面的例子

复制代码 代码如下:

function test(x)     return function (value)         return value * x     end end 。

  。

func = test(10) 。

print( func(11) ) 。

在test()中,嵌套了一个匿名函数作为返回值, 而在这个匿名函数中 可以访问外部的 value 变量 再看另一个例子 。

复制代码 代码如下:

function newCounter()         local i = 0         func = function()                 i = i + 1                 return i         end 。

  。

        return func end 。

c = newCounter() print(c()) print(c()) 。

c1 = newCounter() print(c1()) print(c1()) 。

代码中, 函数 func 里访问了一个 "非局部的变量" i, 用于保存一个计数器 初步看,由于创建变量i的函数 newCounter 已经返回, 所以每次调用 func 时, 应该是超过了作用范围 。

  。

其实不然, lua 会以 closure 的概念来处理这种情况. 一个 closure 就是一个函数加上该函数所需访问的所有"非局部的变量" 。

所以上例中 c1, c2 是同个函数所创建的两个不同的 closure, 它们各自拥有局部变量i的独立实例. 。

从技术上来讲, lua中只有 closure, 而不存在"函数". 因为"函数"本身就是一种特殊的 closure. 。

后记,C++的类对象不也可以达到类似的效果?

最后此篇关于LUA中的闭包(closure)浅析的文章就讲到这里了,如果你想了解更多关于LUA中的闭包(closure)浅析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com