前一段时间,在学习lua语言时,看lua中文教程,在读闭包这一节时,看了好几遍,对闭包这个概念还是很模糊,不能清楚的理解它是怎么回事
最近工作不是很忙,所以就自学了一些lua的知识,但是才看了两个多小时就遇见了一个问题——闭包。好吧,我是看见它第一眼的时候以为是和close之类有关的巴拉巴拉。。。。(原谅我的无知)!但是越往下看越迷茫,所以就网上看了好多大师写的东西学习学习,特此记录一下,以便日后看到不会。。。。。被人鄙视
在lua中函数也是变量,可以存储在表中,也可以是函数的参数,或是返回值,其实是个lua 的闭包大概可以理解成这个样子 闭包(函数名){功能抽象, upvalue, env},功能抽象就是函数体了,
upvalue: 是内嵌函数可以访问外包函数已经创建的所有局部变量,这些局部变量称为该内嵌函数的外部局部变量(external local variable)或者upvalue,upvalue实际指的是变量而不是值。
function newCounter() local i = 0 return function() i = i + 1 return i end end
在上面的例子中i就是一个upvalue
简单的说闭包是一个函数加上它可以正确访问的 upvalue。upvalue是嵌套函数的外部函数的局部变量。这个函数一般定义在另一个函数内部;他可以访问定义在外部函数内的成员变量,参数,以及全局函数。并且这个函数还可以返回函数。
表和函数
一:
Lib = {} Lib.foo = function (x,y) retrun x+ y end Lib.goo = function(x)retrun x end;
二:
Lib = { foo = function (x,y) retrun x+ y end goo = function(x)retrun x end; }
三:
Lib = {} Lib = {} functio Lib.foo (x,y) retrun x+ y end function Lib.goo (x)retrun x end;
以上就是对lua的闭包和表与函数的理解,有需要的小伙伴可以参考下。
闭包主要就是提升函数中变量的作用域,首先要理解作用域 函数作为返回值 function F1() { var a = 100; //返回一个函数(函数作为返回值) return function () { console.log(a);//自由变量,父作用域中查找 } } //f1得到一个函数 var f1 = F1(); var a = 200; f1(); 函数作为参数
本文向大家介绍javaScript使用EL表达式的几种方式,包括了javaScript使用EL表达式的几种方式的使用技巧和注意事项,需要的朋友参考一下 1.可以使用双引号将EL表达式括起来,这个不是对所有的都行,只对适合${param}这种类型 2.可以将其作为javaScript中的函数的参数。 3.使用隐藏表单域将值传过去原理和(1)是一样的!
本文向大家介绍Lua中table的几种构造方式详解,包括了Lua中table的几种构造方式详解的使用技巧和注意事项,需要的朋友参考一下 之前对于Lua的研究都是纸上谈兵,没有真正的项目练手,现在公司的项目基本上都是用Lua开发,是时候补充一下我那蹩脚的Lua知识了。 基础数据类型、表达式、循环结构什么的我就不说了,这么简单的东西说了也要被大家喷。 今天我想说说table的几种构造方式。 0.Lua
主要内容:1 磁盘空洞的形成,2 重建表,2.1 Online DDL,2.2 inplace DDL,3 总结详细介绍了Mysql删除数据但是磁盘占用并没有减少的原因——磁盘空洞,以及磁盘空洞的解决方法和几种重建表的方式的区别。 有时候我们直接物理删除变种的某些数据,以期望减少磁盘的占用,但是我们会发现即使物理删除了部分数据,但是Mysql的磁盘占用并没有减少,现在我们来看看造成这一现象的原因以及解决方法。 1 磁盘空洞的形成 Mysql使用InnoDB作为存储引擎时,InnoDB里的数据都是
本文向大家介绍详解Swift中的函数及函数闭包使用,包括了详解Swift中的函数及函数闭包使用的使用技巧和注意事项,需要的朋友参考一下 一、引言 函数是有特定功能的代码段,函数会有一个特定的名称调用时来使用。Swift提供了十分灵活的方式来创建与调用函数。事实上在Swift,每个函数都是一种类型,这种类型由参数和返回值来决定。Swift和Objective-C的一大区别就在于Swift中的函数可以
本文向大家介绍深入理解javascript函数参数与闭包,包括了深入理解javascript函数参数与闭包的使用技巧和注意事项,需要的朋友参考一下 最近在学习javascript的函数,函数是javascript的一等对象,想要学好javascript,就必须深刻理解函数。本人把学习的过程整理成文章,一是为了加深自己函数的理解,二是给读者提供学习的途径,避免走弯路。内容有些多,但都是笔者对于函数的