美文网首页
Lua学习笔记(6)——迭代器与泛型for

Lua学习笔记(6)——迭代器与泛型for

作者: 嘿小药罐 | 来源:发表于2017-03-17 16:14 被阅读126次

迭代器与closure

1.迭代器,就是一种可以遍历(iterate over)一种集合中所有元素的机制,它通常便是为函数。

返回列表中元素的值的迭代器 在泛型for中使用迭代器

2.泛型for在内部保存了迭代器函数,在每次新迭代时调用迭代器,并在迭代器返回nil时结束。

3.编写迭代器本身或许不容易,但是使用起来却很容易。

遍历单词的迭代器 使用迭代器

泛型for的语义

1.泛型for保存3个值:一个迭代器函数、一个恒定状态(invairant state)和一个控制变量(control variable)。

泛型for语法(<var-list>是一个或多个变量名的列表,以逗号分隔;<exp-list>是一个或多个表达式的列表,同样以逗号分隔。通常表达式只有一个对迭代器工厂的调用。) 遍历表,k为索引,v为值 遍历行

2.for,先对in后面的表达式求值,然后保存表达式返回的3个值,迭代器函数、恒定状态和控制变量的初值,最后一个表达式才会产生多个结果并且只保留3个值,多余的值会被丢弃,不足的话会以nil补足。

初始化后,for会以恒定状态_s和控制变量var_n来调用迭代器函数。然后for将迭代器函数的返回值赋予变量列表中的表里。如果第一个返回值为nil那么循环中止。否则执行它的循环体,随后再次调用迭代器函数,并重复这个过程。

无状态的迭代器

1.无状态的迭代器,就是一种自身不保存任何状态的迭代器。

无状态迭代器ipairs使用 当Lua调用for循环中的ipairs(a)时,它会获得三个值:迭代函数iter、恒定状态a、控制变量的初值0。 next(t,k),该调用会以table中的任意次序返回一组值。没有下一组值是next返回nil。k值为nil时返回table的第一组值。 不通过pairs直接使用next

具有复杂状态的迭代器

1.当迭代器需要保存许多状态时,就需要使用closure。

相关文章

  • lua入门笔记 目录

    lua的中文API lua入门笔记1 类型 表达式 语句 函数lua入门笔记2 深入函数 深入函数 迭代器与泛型f...

  • Lua学习笔记(6)——迭代器与泛型for

    迭代器与closure 1.迭代器,就是一种可以遍历(iterate over)一种集合中所有元素的机制,它通常便...

  • lua学习之迭代器与泛型for第一篇

    迭代器与泛型 for 1 迭代器与 closure 「迭代器」是一种可以遍历一种集合中的所有元素的机制 在 lua...

  • lua学习之迭代器与泛型 for 第三篇

    迭代器与泛型 for 3 具有复杂状态的迭代器 使用 closure 可以保存迭代器所需保存的所有状态 也可以将迭...

  • Collection、泛型

    【Collection、泛型】 主要内容 Collection集合 迭代器 增强for 泛型 Collection...

  • c++学习记录8(GeekBand)

    这周的课讲了将泛型算法。现在将泛型算法收集下,备用。 (1)泛型算法用迭代器来解决第一个要求:遍历容器。所有迭代器...

  • Java学习Day08

    今日学习内容总结 Colection集合 Iterator迭代器 泛型 Collection集合 public b...

  • lua学习之迭代器与泛型 for 第二篇

    迭代器与泛型 for 2 无状态的迭代器 自身不保存任何状态的迭代器 可以在多个循环中适用同一个无状态的迭代器,避...

  • Java-泛型

    day02【Collection、泛型】 主要内容 Collection集合 迭代器 增强for 泛型 教学目标 ...

  • 2019-10-30

    day02【Collection、泛型】 主要内容 Collection集合 迭代器 增强for 泛型 教学目标 ...

网友评论

      本文标题:Lua学习笔记(6)——迭代器与泛型for

      本文链接:https://www.haomeiwen.com/subject/rnuenttx.html