[lua]紫猫lua教程-命令宝典-L1-03-01. 闭包
L1[闭包]01. 函数的传递赋值
没什么说的
1.函数作为变量来看 可以轻松的声明 相互赋值
2.函数变量本质是 一个内存指针 所以函数变量的相互赋值不是传递的函数本身 而是指向这个函数的内存地址
L1[闭包]02. 修改print函数功能
小知识:函数变量相互赋值的一个容易混淆的问题 函数后面的括号问题
function test()
print("执行了test函数")
end
aa=test--不加括号只是函数变量之间的赋值
bb=test()--加了括号表示要执行这个函数 --结果:执行了test函数
L1[闭包]03. table与function
小知识:了解下而已 表内元素是一个函数的推荐写法 其实只要你自己能分清楚就好 怎么写都是可以的
写法一:在普通表上的某个指定元素直接写对应函数的内容 个人习惯如此能尽量避免出现问题和意外
--1 把其他元素都写满 比如key是c的要对应一个函数 其他元素都写上
tempTable={a=1,b="sd",c=1,d=213,e=32}
--2 每个元素分层 要写函数的元素对应的内容先写上function () end
tempTable={a=1,
b="sd",
c=function () end,
d=213,
e=32
}
--3 写完表的指定元素对应的函数内容 完毕
tempTable={a=1,
b="sd",
c=function ()
return "c"
end,
d=213,
e=32
}
方法二:先声明下表 然后用表元素构建函数即可(推荐)
tempTable={a=1,b="sd",d=213,e=32}
tempTable.c=function()
return "c"
end
123
L1[闭包]04. 定义与调用的顺序
无话可说 看标题就明白 鉴于平时习惯就是把常用函数写到一个独立文件然后用dofile在代码开头调用 或者把函数都写到模块文件 然后在当前代码require开头调用 基本不会出现这个问题 罢了
L1[闭包]05. table自定义排序
小知识:table.sort函数的理解 主要是第二个参数的理解
如果第二个参数是函数 那么这个函数默认是2个参数a,b 分别对应第一个参数表里面的从头开始的2个元素 比如第一次取1 2位 第二次取2 3位依次如此 取到表的元素内容后 进入这个第二个参数对应的函数里面进行某种运算 返回true 则表示无需交换参数1表里面的这2个元素的位置 返回false自然是要交换位置 具体什么情况返回true 什么返回false 看函数内自己定义
aa={10,2,31,14,5,2,234,123} function test(a,b)
return a>b--这表示从高到低 反过来你懂的
end table.sort(aa,test)
for v,k in pairs(aa) do print(k)
end
结果:
234
123
31
14
10
5
2
2
L1[闭包]06. 闭包函数
其实闭包的概念我们之前已经看到很多资料了 这里简单的提提
1.闭包的基本结构
function test()
local n=0--外部局部变量 可以理解成C语言下的静态变量
return function ()
n=n+1
return n
end
end f=test()--注意test函数的返回内容是一个函数 而且是一个尚未执行的函数 想要获取这个返回函数的结果 还需要在执行一次才可以
print(f())--1
print(f())--2
print(f())--3
2 闭包的常见用途 实现面向对象编程的静态变量概念
3 闭包的几个注意事项
(1.注意返回的是一个函数 但是只是返回函数 并不是执行函数
(2c语言的静态变量的=外部局部变量 基本特性是
- 对于局部变量作用域依旧没有改变,只有定义该局部变量的函数和复合语句可以引用,但是其生命周期变成了直到整个源程序文件结束。
- 对于全局变量生命周期没有发生变化,但是其作用域反而有所减小,只有本文件的函数可以引用该全局变量。
3.是某函数中的局部变量,那么这个变量只被初始化赋值一次,
当这个函数被多次调用时,除第一次被调用时 m 的内容被初始化外,
以后每次调用时,m 都会在上一次函数被调用时产生结果的基础上继续运行的。
123
[lua]紫猫lua教程-命令宝典-L1-03-01. 闭包的更多相关文章
- [lua]紫猫lua教程-命令宝典-L1-01-03. 数值数据
lua5.3在线手册地址 https://cloudwu.github.io/lua53doc/contents.html#contents 其实我们直接啃手册就够了 推荐如果有基础的先啃手册再看紫 ...
- [lua]紫猫lua教程-命令宝典-L1-01-02. 变量
L1[变量]01. 变量命名规则 命名规则:数字字母下划线构成 但是不能数字开头 不推荐中文名 很多都是不支持中文 但是在一些其他的编辑器里面 比如触摸精灵 之类的 就可以 注意 :变量命名必须要包含 ...
- [lua]紫猫lua教程-命令宝典-L1-01-01. Lua环境与IDE
网上大把的lua教程 不过紫猫老师的教程向来都是讲的非常仔细 所以最近天气已经36+了 魔兽世界还需要冲飞行声望 懒得写单子根本没有单子,正好认认真真的看下紫猫老师的lua教程 紫猫老师的lua教 ...
- [lua]紫猫lua教程-命令宝典-L1-01-04. 字符串数据
L1[字符串]01. 单引号与双引号 没什么说得 字符串:以双引号包含 或者单引号包含 或者[[]]包含 L1[字符串]02. 长文本内容 小知识:如果用[[]]包含字符串内容 但是字符串内容里面 包 ...
- [lua]紫猫lua教程-命令宝典-L1-01-10. 自定义函数
L1[function]01. 定义与调用函数 函数的定义 和概念 没什么可说的 lua的函数声明和调用是有先后顺序的 先声明后调用 函数就是变量的一种 所以可以自由的把函数在变量间相互赋值 不过注 ...
- [lua]紫猫lua教程-命令宝典-L1-01-09. string字符串函数库
L1[string]01. ASCII码互转 小知识:字符串处理的几个共同的几点 1.字符串处理函数 字符串索引可以为负数 表示从字符串末尾开始算起 所有字符串处理函数的 字符串索引参数都使用 2.所 ...
- [lua]紫猫lua教程-命令宝典-L1-01-08. math数学函数库
L1[math]01. 取绝对值 L1[math]02. 三角函数 小知识:注意 lua下三角函数用的参数是弧度 而不是角度 弧度=角度*pi/180 -->弧度角度换算公式 lua的mat ...
- [lua]紫猫lua教程-命令宝典-L1-01-07. table表
L1[table]01. table表的定义与赋值 小知识:声明表的例子 xx={}--创建一个空表xx --给这表的元素赋值 test="a" xx[test]="a& ...
- [lua]紫猫lua教程-命令宝典-L1-01-06. 循环结构
L1[循环]01. for循环结构介绍 只是简单的说了下计数型的for循环结构 for i=1,10,1 do testlib.traceprint(i) end 注意几点: 1.上面的1和10表示循 ...
- [lua]紫猫lua教程-命令宝典-L1-01-05. if判断结构
L1[if]01. 简单的if判断结构 没什么说得 if得基本结构如下 xxx= ) then testlib.traceprint("1-100") ) then testlib ...
随机推荐
- CF895C Square Subsets [线性基]
线性基的题- 考虑平方数只和拆解质因子的个数的奇偶性有关系 比如说你 \(4\) 和 \(16\) 的贡献都是一样的.因为 \(4 = 2^2 , 16 = 2^4\) \(2\) 和 \(4\) 奇 ...
- LeetCode 237. 删除链表中的节点 (单链表遍历)
题目链接:https://leetcode-cn.com/problems/delete-node-in-a-linked-list/ 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将 ...
- "Chrome的network中无法显示OPTIONS请求"的解决方案
目录 #事故现场 #分析及解决方法 #参考 #事故现场 在前端发送一个跨域请求的时候,要先发送个options请求,从而获知服务端是否允许该跨域请求. 跨域资源共享标准新增了一组 HTTP 首部字段, ...
- 变量 Variables
是为了存储(store)程序(program)运算过程中的一些信息(informations),为了方便日后调用.操作和更改 变量名应该简明,见名识意,让读者和我们自己能更清晰的了解 如果我们把变量看 ...
- LeetCode Subarray Product Less Than K 题解 双指针+单调性
题意 给定一个正整数数组和K,数有多少个连续子数组满足: 数组中所有的元素的积小于K. 思路 依旧是双指针的思路 我们首先固定右指针r. 现在子数组的最右边的元素是nums[r]. 我们让这个子数组尽 ...
- 2018 HBCPC 菜鸡选手记
我果然太菜了 A B--T2 D--T4 C--T3 F 我果然太菜了 作为学校最菜的队员,今天下午被虐惨了. 一下午才做A-D四道题 官方题解链接 晚上吃完饭再去看. A 队友A的不清楚.没看题. ...
- pytest-fixture之conftest.py
场景: 对于一个py文件中某些用例需要前置条件,某些用例不需要前置条件的情况,使用setup/teardown肯定是不方便的, 这时就需要自定义测试用例的前置条件. 1.fixture优点: 命名不局 ...
- Dijkstra算法依据项目改进版,输出路径
package dijkstra; import java.util.ArrayList; public class Dijkstra { ; /*private static int[][] Gra ...
- layer.open获取弹出层的input框的值
使用top.$('#txtReason').val();获取值: //不通过 function unAuditData(id) { parent.layer.open({ type: , title: ...
- 机器学习作业(四)神经网络参数的拟合——Matlab实现
题目下载[传送门] 题目简述:识别图片中的数字,训练该模型,求参数θ. 第1步:读取数据文件: %% Setup the parameters you will use for this exerci ...