• 【Lua面试】 迭代器和泛型For


    Lua面试题重点提问

    迭代器和闭包

    迭代器Iterator:是一种可以遍历一个集合中所有元素的结构。
    迭代器函数Iterator():每次调用,函数会返回“下一个”元素的数值(不是返回索引)。

    闭包:可以访问自身环境中一个或多个局部变量(捕获引用环境中的变量)

    迭代器和闭包的关系

    调用迭代器函数,会返回下一个元素,闭包保存下一个元素的值。

    创建闭包结构

    创建闭包:创建一个非局部变量
    闭包结构:闭包self+创建闭包机器封装变量的工厂Factory

    泛型for

    泛型for为了迭代而设计
    一次迭代循环,泛型for内部保存了迭代函数,不需要iter
    每次做新的迭代,都会再次调用迭代函数,返回nil结束迭代

    闭包、迭代器、泛型for示例

    在这里插入图片描述

    一般不会自己去定义迭代器,而是去使用已经提供的迭代器

    泛型for的语法

    创建一个闭包开销可能会很大的问题
    为了解决开销问题,那就使用泛型for自己保存迭代状态

    泛型for保存了三个值
    1个迭代函数,1个不可变状态,1个控制变量
    var-list :N个变量名组成的列表,逗号隔开
    exp-list:N个表达式组成的列表,通常只有一个,对迭代器工厂的调用

    控制变量:var-list 变量列表第一个

    for var-list in exp-list do body end
    for k,v in pairs(t) do print(k,v) end 
    
    • 1
    • 2

    泛型for内部流程

    1.泛型for使用不可变状态和控制变量作为参数来调用迭代函数
    2.迭代函数的返回值返给变量列表中声明的变量
    3.如果返回nil,循环结束,否则一直循环,再次调用迭代函数

    无状态迭代器

    无状态迭代器:自身不保存任何状态的迭代器,多个循环中使用一个无状态循环器,避免创建闭包的开销。
    一个无状态迭代器,只使用不可变变量和控制变量来为迭代生成下一个元素
    典型例子是ipairs,可以迭代一个序列中的所有元素

    例子:按顺序遍历表

    所有的复杂性都隐藏在迭代器中实现

    在这里插入图片描述

  • 相关阅读:
    安装 ROS 与mqtt_bridge 指北
    长短期负荷预测(Matlab代码实现)
    MATLAB学习
    Zoho Creator推出全新的Canvas布局设计器功能
    C++ 基础与深度分析 Chapter8 动态内存管理(动态内存基础、智能指针、相关问题)
    LeetCode 每日一题 2022/10/24-2022/10/30
    浪潮信息面向全行业公布设计指南,以开放规范促进生成式AI多元算力发展
    好物周刊#19:开源指北
    mysql 注入之权限
    Solidity 小白教程:15. 异常
  • 原文地址:https://blog.csdn.net/qq_21407523/article/details/126372126