[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语言的静态变量的=外部局部变量  基本特性是 

  1. 对于局部变量作用域依旧没有改变,只有定义该局部变量的函数和复合语句可以引用,但是其生命周期变成了直到整个源程序文件结束
  2. 对于全局变量生命周期没有发生变化,但是其作用域反而有所减小,只有本文件的函数可以引用该全局变量。

3.是某函数中的局部变量,那么这个变量只被初始化赋值一次,
当这个函数被多次调用时,除第一次被调用时 m 的内容被初始化外,
以后每次调用时,m 都会在上一次函数被调用时产生结果的基础上继续运行的。

123

转载于:https://www.cnblogs.com/zjl8455482/p/11273278.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值