lua闭包的理解以及表与函数的几种表达方法_Lua

前一段时间,在学习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的闭包和表与函数的理解,有需要的小伙伴可以参考下。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索lua
闭包
lua闭包理解、lua 闭包函数、lua 闭包、lua 闭包 迭代器、lua中的闭包,以便于您获取更多的相关知识。

时间: 2024-10-02 13:53:58

lua闭包的理解以及表与函数的几种表达方法_Lua的相关文章

WinXP系统注册表被禁用的6种解决方法

  今天,我们将要跟大家分享的是,WinXP系统注册表被禁用的6种解决方法.那么,可能会有电脑用户会问:WinXP系统的注册表被禁用了会造成什么后果,严重吗?我们知道注册表是Windows系统里的重要区域,很容易遭受到各种病毒,恶意网站的攻击,让你的注册表被禁用,当你的WinXP注册表被禁用后,你的系统也就变得薄弱,此时相当的危险,因此尽快解禁还需要使用一些手段.下面就告诉大家几招解禁WinXP注册表的方法. 注册表 1.使用工具软件(适用于WinXP及以上系统) 如优化大师.超级兔子等,都有个

JavaScript函数的4种调用方法详解_javascript技巧

在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C#或其他描述性语言那样仅仅作为一个模块来使用.函数有四种调用模式,分别是:函数调用形式.方法调用形式.构造器形式.以及apply形式.这里所有的调用模式中,最主要的区别在于关键字 this 的意义,下面分别介绍这个几种调用形式. 本文主要内容: 1.分析函数的四种调用形式2.弄清楚函数中this的意义3.明确构造函对象的过程4.学会使用上下文调用函数 一.函数调用形式 函数调用形式是最常见的形式,也是最

js function定义函数的几种不错方法_javascript技巧

js function定义函数的4种方法 1.最基本的作为一个本本分分的函数声明使用. 复制代码代码如下: 复制代码 代码如下: function func(){} 或 var func=function(){}; 2.作为一个类构造器使用: 复制代码代码如下: 复制代码 代码如下: function class(){} class.prototype={}; var item=new class(); 3.作为闭包使用: 复制代码代码如下: 复制代码 代码如下: (function(){ //

oracle 表空间利用率的几种查询方法

--查询表空间使用情况 SELECT Upper(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)", To_char(Round(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT_GROOTTE_MB * 100, 2), '990.99') || '%' &

php 防止表单重复提交两种实现方法_php实例

php 防止表单重复提交 由于网络原因,经常出来点了提交按钮,网页没有反应,而进行再次点击.这样就导致后台收到两次提交,从而进行两次处理,本文章向大家介绍php 防止表单重复提交的几种方法 1.前端解决 方法一: 可以通过前端来解决.当用户点了提交按钮之后,先使用js进行有效性判断,没问题后,将提交按钮"禁用"掉.然后再提交! 方法二: 使用ajax提交表单.点了提交按钮后,禁用提将按钮,或者设置一个状态值,将其设为1,表示正在提交.再提交时判断如果正在提交,则不作处理.等ajax返回

jquery ajax提交表单数据的两种实现方法_jquery

之前实现AJAX使用Javascript脚本一个一个敲出来的,很繁琐.学习Jquery之后就感觉实现AJAX并不是那么的困难了,当然除了Jquery框架外还有其它的优秀框架这里我就着重说下比较流行的Jquery.Jquery AJAX提交表单有两种方式,一是url参数提交数据,二是form提交(和平常一样在后台可以获取到Form表单的值).在所要提交的表单中,如果元素很多的话建议用第二种方式进行提交,当然你要是想练练"打字水平"的话用第一种方式提交也未尝不可,相信开发者都不想费白劲吧!

C语言中返回字符串函数的四种实现方法

原文:http://blog.csdn.net/turkeyzhou/article/details/6104135 有四种方式: 1.使用堆空间,返回申请的堆地址,注意释放 2.函数参数传递指针,返回该指针 3.返回函数内定义的静态变量(共享) 4.返回全局变量 ******************以下摘自csdn****************************** 其实就是要返回一个有效的指针,尾部变量退出后就无效了. 使用分配的内存,地址是有效char *fun(){ char*

Sql字符串分组Split函数的两种实现方法

在给文章加自定义标签时,需要在存储过程中对输入的字符串按照","字符分割成一个字符数组.但是Sql中没有实现字符串分组的Split方法.因此就需要编写一个自定义的Split函数.我首先是使用表值函数的方法实现的字符串分组,但是在使用中感觉不是很方便.后来又在网上找到了一种使用两个标量函数,其中一个函数首先返回分割后字符数组的长度,另一个函数依次返回每个分割出的字符串.然后使用循环依次获取分割的字符. 表值函数实现Split方法 代码  Create FUNCTION [dbo].[Sp

详解JavaScript的闭包、IIFE、apply、函数与对象_javascript技巧

目录 一.闭包(Closure) 1.1.闭包相关的问题 1.2.理解闭包 二.对象 2.1.对象常量(字面量) 2.2.取值 2.3.枚举(遍历) 2.4.更新与添加 2.5.对象的原型 2.6.删除 2.7.封装 三.函数 3.1.参数对象 (arguments) 3.2.构造函数 3.3.函数调用 3.3.1.call 3.3.2.apply 3.3.3.caller 3.3.4.Callee 3.5.立即执行函数表达式 (IIFE) 3.5.1.匿名函数与匿名对象 3.5.2.函数与函数