【Lua】闭包可能会导致的变量问题

先思考下面这个问题:

local function counter()local count = 0return function()count = count + 1return countend
endlocal a = counter()
local b = counter()print(a()) --> ?
print(a()) --> ?
print(b()) --> ?
print(a()) --> ?

输出结果:

print(a()) --> 1
print(a()) --> 2
print(b()) --> 1
print(a()) --> 3

问题1:为什么每一次print(a())的结果都不一致呢?函数体内的count不应该是一个临时变量吗,怎么在调用之前会在上一次调用的结果后进行计算?
分析原因🤔:这是由于闭包引起的,由于return内写的函数里对count有所引用,因此在每次调用完a后,变量count并没有被销毁

问题2:为什么a的值与b的值不会相互影响?
回答🤔:a和b都是由counter()返回的闭包函数实例,它们分别捕获了不同的 count 变量副本,因此它们的计数是相互独立的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/915077.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/915077.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可观测性、OpenTracing、OpenCensus、OpenTelemetry、Jaeger

监控与观测 随着软件应用从单片架构向分布式微服务体系转变,应用监控(Monitoring)和观测(Observability)的需求也随之提升。两者存在相同的定义,目的都是为了发现应用程序中的问题。但还是有差别: 监控:目的是为了捕获已知的问题…

Linux下使用原始socket收发数据包

在Linux系统中,使用非原始的socket,可以收发TCP或者UDP等网络层数据包。如果要处理网络层以下的数据包,比如ICMP、ARP等,或者更底层,比如链路层数据包,就得使用原始socket了。 创建socket 创建socket要使用…

暑期自学嵌入式——Day05补充(C语言阶段)

接续上文:暑期自学嵌入式——Day05(C语言阶段)-CSDN博客 主页点关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!! 主页: 一位搞嵌入式的 genius-CSDN博…

.NET Core EFCore零基础快速入门简单使用

一、什么是 Entity Framework (EF) Core Entity Framework (EF) Core 是轻量化、可扩展和跨平台版的对象关系映射程序 (O/RM)数据访问技术,。 它将开发人员从编写大量 SQL 语句中解放出来。 二、EF的相关程序包 Microsoft.EntityFrameworkCore 核心程序包&#x…

AAC音频格式

目录 AAC音频格式介绍 主要特点 技术优势 常见文件扩展名 应用领域 AAC与PCM的区别与优势对比 基本概念差异 主要技术区别 各自优势 PCM的优势 AAC的优势 应用场景选择 AAC音频数据格式解析 1. AAC 文件格式 (1) ADIF (Audio Data Interchange Format) (2) ADT…

pom.xml文件中的${}变量从哪里传值

在 Maven 的 pom.xml 文件中,${} 格式的变量(称为属性占位符)的值来源主要有以下几种途径: 1. ​内置属性(Maven 预定义)​​ ${project.basedir}:项目根目录${project.version}:项…

【人工智能】项目案例分析:使用TensorFlow进行大规模对象检测

🏆🏆欢迎大家来到我们的天空🏆🏆 🏆 作者简介:我们的天空 🏆《头衔》:大厂高级软件测试工程师,阿里云开发者社区专家博主,CSDN人工智能领域新星创作者。 🏆《博客》:人工智能,深度学习,机器学习,python,自然语言处理,AIGC等分享。 所属的专栏:TensorF…

C++---cout、cerr、clog

在C编程里,cout、cerr和clog是标准库提供的重要输出流对象,在数据输出方面发挥着关键作用。 一、cout:标准输出流 cout 是 std::ostream 类的对象,其作用是向标准输出设备(一般是控制台)输出数据。它和 C 语…

脉冲神经网络(Spiking Neural Network, SNN)与知识蒸馏(Knowledge Distillation, KD)

目录 脉冲神经网络(Spiking Neural Network, SNN) 知识蒸馏(Knowledge Distillation, KD) 三种类别 三种变体 脉冲神经网络(Spiking Neural Network, SNN) 收到生物神经系统的启发,设计的&a…

使用Java完成下面项目

第一题:从控制台输入十个学生的成绩,使用list集合来保存数据, 遍历并打印其中成绩不及格的成绩,打印最高成绩,最低成绩,并计算及格率代码如下public class Home1 {public static void main(String[] args) …

龙虎榜——20250718

上证指数今天上涨收阳线,继续在5天均线保持强势上涨,个股下跌稍多,大盘股上涨为主。深证指数收小阳线,继续在5天均线上,总体保持强势,调整更多是小票。2025年7月18日龙虎榜行业方向分析1. 医药医疗• 代表标…

2025年华为认证之HCIE-云计算方向的报考流程

一、先搞明白:HCIE - 云计算认证到底是啥? HCIE - 云计算(华为认证 ICT 专家 - 云计算)是华为体系里云计算领域的顶级认证,说白了,就是证明你有能力搞定大型企业的云平台设计、部署和运维。现在政企、金融…

什么是私有化部署企业即时通讯?吱吱企业即时通讯安全吗?

在企业数字化转型加速的今天,沟通工具的选择已经从满足简单沟通,升级为“安全、高效、可控”。其中,“私有化部署企业即时通讯”成为许多中小型企业、跨国企业以及数据敏感型企业的核心需求。 那么,究竟什么是私有化部署&#xff…

Vue3 中使用 Element Plus 实现自定义按钮的 ElNotification 提示框

在 Vue3 项目中,我们经常会用到 ElNotification 作为消息提醒组件,尤其是在异步操作、任务完成或用户需要交互确认时。然而,Element Plus 默认的 Notification 是非交互式的,不能直接嵌入按钮或事件。 今天我们来实现一个带自定义…

下载webrtc M114版本源码只能使用外网googlesource源-命令版

声网、国内源都不行,只能外网googlesource源!!! 二、创建 Ubuntu 容器(带目录挂载) 拉取Ubuntu镜像 docker pull ubuntu:22.04创建并启动容器(挂载Windows目录到容器) docker run -i…

Linux运维新手的修炼手扎之第21天

Nginx服务和Tomcat服务1 负载均衡语法格式:upstream[一个或多个]rootubuntu24-13:~# vim /etc/nginx/conf.d/vhost.confupstream group1 {server 10.0.0.16;}upstream group2 {server 10.0.0.14;}server {listen 80;server_name sswang1.magedu.com;location / {pro…

TrOCR: 基于Transformer的光学字符识别方法,使用预训练模型

温馨提示: 本篇文章已同步至"AI专题精讲" TrOCR: 基于Transformer的光学字符识别方法,使用预训练模型 摘要 文本识别是文档数字化中的一个长期研究问题。现有方法通常基于CNN进行图像理解,基于RNN进行字符级文本生成。此外&#…

西门子工业软件全球高级副总裁兼大中华区董事总经理梁乃明先生一行到访庭田科技

概要2025年6月,西门子工业软件全球高级副总裁兼大中华区董事总经理梁乃明先生一行到访我司。庭田科技总经理聂春文携销售团队对西门子代表团表示热烈欢迎,并就当前业务发展方向及未来行业聚焦领域与代表团展开深入交流。 聂春文总经理及销售团队陪同西门…

在 Jenkins 中使用 SSH 部署密钥

本文档介绍了如何在 Jenkins 中配置 SSH 部署密钥,以便更稳定地拉取 Git 仓库代码,避免常见的 RPC 错误。 1. 背景 在使用 Jenkins 进行持续集成时,常常需要从 Git 仓库拉取代码。如果使用 HTTP/HTTPS 协议,有时会遇到 RPC 错误&…

小红书采集工具:无水印图片一键获取,同步采集笔记与评论

我用python语言开发了一款名为“爬xhs图片软件”的工具,该工具不仅能采集图片,还可获取笔记数据、评论数据等内容。 软件界面长这个样子: 采集到的图片:演示视频:https://live.csdn.net/v/485813介绍文章、想你所想&am…