当前位置: 首页 > news >正文

无涯教程-Lua - Iterators(迭代器)

迭代器是一种构造,使您可以遍历所谓的集合或集合的元素。在Lua中,这些集合通常引用表,这些表用于创建各种数据结构(如数组)。

通用迭代器

通用的 for 迭代器提供集合中每个元素的键值对。下面给出一个简单的示例。

array={"Lua", "Tutorial"}for key,value in ipairs(array) 
doprint(key, value)
end

当无涯教程运行上面的代码时,将获得以下输出-

1  Lua
2  Tutorial

上面的示例使用了Lua提供的默认 ipairs 迭代器函数。

在Lua中,使用函数来表示迭代器。基于这些迭代器函数的状态维护,有两种主要类型-

  • 无状态迭代器
  • 有状态迭代器

无状态迭代器

通过名称本身,可以理解这种类型的迭代器函数不保留任何状态。

现在让无涯教程看一个使用简单的函数创建自己的迭代器的示例,该函数打印 n 的平方。

function square(iteratorMaxCount,currentNumber)if currentNumber<iteratorMaxCountthencurrentNumber=currentNumber+1return currentNumber, currentNumber*currentNumberendendfor i,n in square,3,0
doprint(i,n)
end

当运行上面的程序时,将得到以下输出。

1	1
2	4
3	9

可以稍微修改上面的代码,以模仿迭代器的 ipairs 函数的工作方式。如下所示。

function square(iteratorMaxCount,currentNumber)if currentNumber<iteratorMaxCountthencurrentNumber=currentNumber+1return currentNumber, currentNumber*currentNumberendendfunction squares(iteratorMaxCount)return square,iteratorMaxCount,0
end  for i,n in squares(3)
do print(i,n)
end

当运行上面的程序时,将得到以下输出。

1	1
2	4
3	9

有状态迭代器

之前使用函数进行迭代的示例未保留状态。每次调用该函数时,它都会根据发送给该函数的第二个变量返回集合的下一个元素。为了保持当前元素的状态,使用了闭包,闭包在函数调用之间保留变量值。

现在,让无涯教程看一个创建自己的迭代器的示例,其中将使用闭包。

array={"Lua", "Tutorial"}function elementIterator (collection)local index=0local count=#collection-- The closure function is returnedreturn function ()index=index + 1if index <= countthen-- return the current element of the iteratorreturn collection[index]endendendfor element in elementIterator(array)
doprint(element)
end

当运行上面的程序时,将得到以下输出。

Lua
Tutorial

在上面的示例中,无涯教程可以看到elementIterator内部有另一个方法,该方法使用局部外部变量index和count每次调用函数时通过增加索引来返回集合中的每个元素。

Lua - Iterators(迭代器) - 无涯教程网无涯教程网提供迭代器是一种构造,使您可以遍历所谓的集合或集合的元素。在Lua中,这些集合通常引用...https://www.learnfk.com/lua/lua-iterators.html

相关文章:

无涯教程-Lua - Iterators(迭代器)

迭代器是一种构造&#xff0c;使您可以遍历所谓的集合或集合的元素。在Lua中&#xff0c;这些集合通常引用表&#xff0c;这些表用于创建各种数据结构(如数组)。 通用迭代器 通用的 for 迭代器提供集合中每个元素的键值对。下面给出一个简单的示例。 array{"Lua",…...

HTML+CSS+JavaScript:实现B站评论发布效果

一、需求 1、用户输入内容&#xff0c;输入框左下角实时显示输入字数 2、为避免用户输入时在内容左右两端误按多余的空格&#xff0c;在发送评论时&#xff0c;检测用户输入的内容左右两端是否带有空格&#xff0c;若有空格&#xff0c;发布时自动取消左右两端的空格 3、若用…...

实战 - 利用 ThreadLocal 线程局部变量实现数据缓存

文章目录 1. 利用 ThreadLocal 缓存 AssetBranchCache 数据1. 定义 AssetBranchCache 类2. 定义 BranchContext 类操作 AssetBranchCache 对象3. 配置拦截器实时更新和清除缓存数据4. 定义 SaasThreadContextDataHolderBranch 类持有 AssetBranchCache 对象5. 定义 SaasThreadC…...

wxwidgets Ribbon使用简单实例

// RibbonSample.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <wx/wx.h> #include "wx/wxprec.h" #include "wx/app.h" #include "wx/frame.h" #include "wx/textctrl.h" #include "…...

2023年第四届“华数杯”数学建模思路 - 案例:最短时间生产计划安排

文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; 最短时间生产计划模型 该模型出现在好几个竞赛赛题上&#x…...

LeetCode404. 左叶子之和

404. 左叶子之和 文章目录 [404. 左叶子之和](https://leetcode.cn/problems/sum-of-left-leaves/)一、题目二、题解方法一&#xff1a;递归方法二&#xff1a;迭代 一、题目 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 示例 1&#xff1a; 输入: root [3,9…...

Nginx 高性能内存池 ----【学习笔记】

跟着这篇文章学习&#xff1a; c代码实现一个高性能内存池&#xff08;超详细版本&#xff09;_c 内存池库_linux大本营的博客-CSDN博客https://blog.csdn.net/qq_40989769/article/details/130874660以及这个视频学习&#xff1a; nginx的内存池_哔哩哔哩_bilibilihttps://w…...

iOS--frame和bounds

坐标系 首先&#xff0c;我们来看一下iOS特有的坐标系&#xff0c;在iOS坐标系中以左上角为坐标原点&#xff0c;往右为X正方向&#xff0c;往下是Y正方向如下图&#xff1a; bounds和frame都是属于CGRect类型的结构体&#xff0c;系统的定义如下&#xff0c;包含一个CGPoint…...

docker logs 使用说明

docker logs 可以查看某个容器内的日志情况。 前置参数说明 c_name容器名称 / 容器ID logs 获取容器的日志 , 命令如下&#xff1a; docker logs [options] c_name option参数&#xff1a; -n 查看最近多少条记录&#xff1a;docker logs -n 5 c_name--tail与-n 一样 &#…...

Ceph入门到精通-Ceph PG状态详细介绍(全)

本文主要介绍PG的各个状态&#xff0c;以及ceph故障过程中PG状态的转变。 Placement Group States&#xff08;PG状态&#xff09; creating Ceph is still creating the placement group. Ceph 仍在创建PG。activating The placement group is peered but not yet active.…...

【数据结构】二叉树、二叉搜索树、平衡二叉树、红黑树、B树、B+树

概述 二叉树&#xff08;Binary Tree&#xff09;&#xff1a;每个节点最多有两个子节点&#xff08;左子节点和右子节点&#xff09;&#xff0c;没有限制节点的顺序。特点是简单直观&#xff0c;易于实现&#xff0c;但查找效率较低。 二叉搜索树&#xff08;Binary Search…...

【JVM】(二)深入理解Java类加载机制与双亲委派模型

文章目录 前言一、类加载过程1.1 加载&#xff08;Loading&#xff09;1.2 验证&#xff08;Verification&#xff09;1.3 准备&#xff08;Preparation&#xff09;1.4 解析&#xff08;Resolution&#xff09;1.5 初始化&#xff08;Initialization&#xff09; 二、双亲委派…...

npm i 报错项目启动不了解决方法

1.场景 在另一台电脑低版本node环境跑的react项目&#xff0c;换到另一台电脑node18环境执行npm i时候报错 2.解决方法 脚本前加上set NODE_OPTIONS--openssl-legacy-provider...

【从零开始学习JAVA | 第三十七篇】初识多线程

目录 前言&#xff1a; ​编辑 引入&#xff1a; 多线程&#xff1a; 什么是多线程&#xff1a; 多线程的意义&#xff1a; 多线程的应用场景&#xff1a; 总结&#xff1a; 前言&#xff1a; 本章节我们将开始学习多线程&#xff0c;多线程是一个很重要的知识点&#xff…...

微信新功能,你都知道吗?

近日iOS 微信8.0.40正式版来了&#xff0c;一起来看看有哪些变化&#xff1f; 1、朋友圈置顶 几个月前微信开始内测「朋友圈置顶」功能&#xff0c;从网友们的反馈来看&#xff0c;iOS 微信 8.0.40 似乎扩大了内测范围&#xff0c;更多用户可以体验到该功能了。 大家可以去自己…...

Android 中 app freezer 原理详解(二):S 版本

基于版本&#xff1a;Android S 0. 前言 在之前的两篇博文《Android 中app内存回收优化(一)》和 《Android 中app内存回收优化(二)》中详细剖析了 Android 中 app 内存优化的流程。这个机制的管理通过 CachedAppOptimizer 类管理&#xff0c;为什么叫这个名字&#xff0c;而不…...

Vue3_04_ref 函数和 reactive 函数

ref 函数 声明变量时&#xff0c;赋值的值要写在 ref() 函数中修改变量时&#xff0c;变量名.value xxx在模板中使用时可以省略掉 .value&#xff0c;直接使用变量名即可 <template><h1>一个人的信息</h1><h2>姓名&#xff1a;{{name}}</h2><…...

05 Ubuntu下安装.deb安装包方式安装vscode,snap安装Jetbrains产品等常用软件

使用deb包安装类型 deb包指的其实就是debian系统&#xff0c;ubuntu系统是基于debian系统的发行版。 一般我们会到需要的软件官网下载deb安装包&#xff0c;然后你既可以采用使用“软件安装”打开的方法来进行安装&#xff0c;也可以使用命令行进行安装。我推荐后者&#xff…...

性能测试jmeter连接数据库jdbc(sql server举例)

一、下载第三方工具包驱动数据库 1. 因为JMeter本身没有提供链接数据库的功能&#xff0c;所以我们需要借助第三方的工具包来实现。 &#xff08;有这个jar包之后&#xff0c;jmeter可以发起jdbc请求&#xff0c;没有这个jar包&#xff0c;也有jdbc取样器&#xff0c;但不能发起…...

8.3 C高级 Shell脚本

写一个脚本&#xff0c;包含以下内容&#xff1a; 显示/etc/group文件中第五行的内容创建目录/home/ubuntu/copy切换工作路径到此目录赋值/etc/shadow到此目录&#xff0c;并重命名为test将当前目录中test的所属用户改为root将test中其他用户的权限改为没有任何权限 #!/bin/b…...

Highcharts 12.6 正式发布:等高线图 + WebGPU 渲染,引领高性能数据可视化新时代

近日&#xff0c;全球领先的 JavaScript 图表库 Highcharts 正式发布 12.6 版本。本次更新带来了多项重磅功能升级&#xff0c;尤其是在高性能渲染与科学计算可视化领域实现突破&#xff0c;包括&#xff1a;全新 等高线图&#xff08;Contour Plot&#xff09;前沿 WebGPU 渲染…...

高效显卡配置指南:NVIDIA Profile Inspector开源工具的完整使用方案

高效显卡配置指南&#xff1a;NVIDIA Profile Inspector开源工具的完整使用方案 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 在游戏优化和显卡性能调校领域&#xff0c;NVIDIA Profile Inspector&am…...

Gopher360:3步让游戏手柄变身PC遥控器的实用工具

Gopher360&#xff1a;3步让游戏手柄变身PC遥控器的实用工具 【免费下载链接】Gopher360 Gopher360 is a free zero-config app that instantly turns your Xbox 360, Xbox One, or even DualShock controller into a mouse and keyboard. Just download, run, and relax. 项…...

Java 25 模式匹配增强:现代Java的新特性

Java 25 模式匹配增强&#xff1a;现代Java的新特性 1. 模式匹配的核心概念 模式匹配是一种编程范式&#xff0c;它允许开发者根据对象的结构和类型来匹配和处理数据。Java 25 对模式匹配进行了显著增强&#xff0c;提供了更强大、更灵活的模式匹配能力&#xff0c;使代码更加简…...

Dify二次开发实战:从环境搭建到CI/CD全链路解析

1. 环境准备&#xff1a;搭建Dify二次开发的基础设施 第一次接触Dify二次开发时&#xff0c;我被它复杂的依赖关系搞得手忙脚乱。经过三个项目的实战积累&#xff0c;我总结出一套最稳定的环境配置方案&#xff0c;让你少走弯路。 开发Dify需要同时处理Python和Node.js两个生态…...

Cesium弹窗避坑指南:解决Popup随相机移动闪烁、位置偏移的5个常见问题

Cesium弹窗避坑指南&#xff1a;解决Popup随相机移动闪烁、位置偏移的5个常见问题 在三维地理信息系统的开发中&#xff0c;Cesium作为一款强大的WebGL地球引擎&#xff0c;为开发者提供了丰富的可视化能力。其中&#xff0c;弹窗(Popup)作为信息展示的重要交互组件&#xff0c…...

Qwen3-4B模型入门教程:部署后如何确认服务正常并开始使用?

Qwen3-4B模型入门教程&#xff1a;部署后如何确认服务正常并开始使用&#xff1f; 1. 教程目标与准备工作 刚部署完Qwen3-4B模型&#xff0c;你可能会有这样的疑问&#xff1a;服务真的跑起来了吗&#xff1f;怎么知道模型已经准备好接受请求了&#xff1f;本教程将带你一步步…...

实测Qwen2.5-7B:用Ollama快速搭建,体验多语言AI对话的魅力

实测Qwen2.5-7B&#xff1a;用Ollama快速搭建&#xff0c;体验多语言AI对话的魅力 1. 引言&#xff1a;为什么选择Qwen2.5-7B 在当今AI大模型百花齐放的时代&#xff0c;阿里开源的Qwen2.5系列凭借其出色的多语言能力和本地化部署优势脱颖而出。作为该系列中的7B参数版本&…...

如何利用S32DS与NCF Tool高效配置KEA的LIN节点(一)

1. 从零认识LIN总线与KEA系列MCU 第一次接触汽车电子开发的朋友可能会好奇&#xff0c;为什么车窗升降、雨刮控制这些简单功能需要专门的总线协议&#xff1f;其实在车身控制领域&#xff0c;LIN&#xff08;Local Interconnect Network&#xff09;总线就像小区里的自行车道—…...

SDR技术在医学成像OCT中的应用与优化

1. SDR技术与医学成像的跨界融合在医疗设备研发领域&#xff0c;一个令人着迷的现象是&#xff1a;尖端技术往往先在军事或通信领域成熟&#xff0c;随后才逐步渗透到民用医疗领域。这种技术迁移不仅降低了研发成本&#xff0c;更带来了性能的飞跃。软件定义无线电&#xff08;…...