zoukankan      html  css  js  c++  java
  • Lua 迭代器

    1. 第一种:lua迭代器的实现依赖于闭包(closure)特性

    1.1 第一个简单的写法

    --迭代器写法
    function self_iter( t )
      local i = 0
    	return function ()
    		i = i + 1;
    		return t[i]
    	end
    end
    
    -- 使用
    local t = {10, 20, 30}
    local iter = self_iter(t)  -- 这里就是使用了闭包函数的特性
    while true do
      local element = iter()
    	if element == nil then break end
    	print(element)
    end
    
    1. 第二种:使用泛型for实现
      2.1 语法
    for <var-list> in <exp-list> do
        <body>
    end
    
    2.2 泛型for理解:for做的第一件事就是对in后面的表达式进行求值,返回3个值,分别是迭代器函数(iter),恒定变量(table),控制变量(i),之后就会使用恒定变量和控制变量来调用迭代器函数
    
    2.3 泛型for迭代器实现例子
    
    -- 迭代器
    local function self_iter( list, i )
        i = i + 1
        local v = list[i]
    	print(v)
    	if v then
        	return i, v
    	end
    end
    
    -- for 初始化
    function self_ipairs( list )
    	return self_iter, list, 0
    end
    
    -- 使用
    local a = {10, 20, 40}
    
    for k, v in self_ipairs(a) do
    	print(k, ' ', v)
    end
    
    • 注:各种复杂的迭代器实现就是对迭代器函数(iter)和恒定变量(table)的各种变形
  • 相关阅读:
    coffee.js
    domOperation.js
    ImmediateFunc.js
    callback.js
    array.js
    asynchronous.js
    addEventListener.js
    meta的日常设置
    11.11 双十一 前端教你一键领取天猫千张优惠券 (领前先想想有没有钱花这些优惠券)
    前端的最后是逻辑和数学
  • 原文地址:https://www.cnblogs.com/zjzyh/p/4917975.html
Copyright © 2011-2022 走看看