美文网首页
闭包和upvalue

闭包和upvalue

作者: 抟九 | 来源:发表于2020-04-28 08:59 被阅读0次

这是lua里的两个概念,今天才理解。
所谓闭包 ,简单地理解,它其实是一个函数,不过它访问了另外一个函数词法作用域中的变量。

local function foo()
     local i = 1
     local function bar()
         i = i + 1         print(i)
     end
     return bar
end
local fn = foo()
print(fn()) -- 2

bar函数中引用了foo里的i变量,所以bar是一个闭包。
所有的lua函数可以说都是一个闭包,因为lua在编译之后,会在外围加上一层main函数,使得所有的函数都成了嵌套函数。

upvalue可以理解为上面的值,就是另一个词法作用域的变量,上面代码中的 bar()函数里的i就是upvalue

一个函数的局部变量和upvalue都有上限,默认是250和60,所以对于只在某个函数里使用的变量,就仅在该函数定义就好

相关文章

  • 闭包和upvalue

    这是lua里的两个概念,今天才理解。所谓闭包 ,简单地理解,它其实是一个函数,不过它访问了另外一个函数词法作用域中...

  • Lua语法 闭包

    子函数可以使用父函数中的局部变量,这种行为叫做闭包闭包组成:外部函数+外部函数创建的upvalue+内部函数 问题...

  • lua进阶笔记1:函数与闭包

    感谢前人的分享 :Lua的upvalue和闭包 首先我们先来举一个c++中函数的例子,我们声明了一个函数,例如 这...

  • rust 闭包与同步

    rust 闭包与同步 rust 闭包 rust闭包中主要包括两个部分,闭包参数和闭包环境变量。闭包函数和函数参数使...

  • 闭包(closure)

    ● 闭包基础 ● 闭包作用 ● 闭包经典例子 ● 闭包应用 ● 闭包缺点 ● 参考资料 1、闭包基础 作用域和作...

  • iOS swift 逃逸闭包(@escaping)和非逃逸闭

    iOS swift 逃逸闭包(@escaping)和非逃逸闭包 (@noescaping) 逃逸闭包: 逃逸闭包...

  • php之闭包函数(Closure)

    php闭包函数(Closure) JS闭包 js和php闭包使用和区别

  • groovy-闭包

    定义和执行闭包 闭包作为参数返回 闭包作为参数传递 闭包使用外部变量 注意: 闭包可使用(引用)闭包外部定义的变量...

  • Swift 闭包

    闭包 闭包是保存一段代码块,可以在代码中传递和是使用(类似Block) 闭包和block类似 闭包的表达式如下闭包...

  • Swift 2.0 学习笔记 7_闭包

    //: 闭包 //: 闭包的定义 // 闭包是自包含的函数代码块, 可以在代码中被传递和使用. 闭包可以捕获和存储...

网友评论

      本文标题:闭包和upvalue

      本文链接:https://www.haomeiwen.com/subject/attpwhtx.html