lua积累


--自己实现迭代器
function get_each_fun(array)
    local i=0
    local length=table.getn(array);
    return function()
        i=i+1;
        return (i>length and nilor array[i];
    end
end

list={1,3,5,7,9}
for item in get_each_fun(list) do
    print(item)
end
print '-----------------------------------------------------'
for item in get_each_fun(list) do
    print(item)
end  

 

--自己实现迭代器
function get_each_fun(array)
    local i=0
    local length=table.getn(array);
    return function()
        i=i+1;
        if i>length then
            return nil;
        else
            return i,array[i];
        end
    end
end

list={1,3,5,7,9}
for key,item in get_each_fun(list) do
    print(key,item)
end
print '-----------------------------------------------------'
for key,item in get_each_fun(list) do
    print(key,item)
end

 

 

范型for 的语义如下:

范性for的执行过程:
首先,初始化,计算in后面表达式的值,表达式应该返回范性for需要的三个值:迭代函数、状态常量、控制变量;与多值赋值一样,如果表达式返回的结果个数不足三个会自动用nil补足,多出部分会被忽略。
第二,将状态常量和控制变量作为参数调用迭代函数(注意:对于for结构来说,状态常量没有用处,仅仅在初始化时获取他的值并传递给迭代函数)。
第三,将迭代函数返回的值赋给变量列表。
第四,如果返回的第一个值为nil循环结束,否则执行循环体。
第五,回到第二步再次调用迭代函数。
更具体地说: 
for var_1, ..., var_n in explist do block end
等价于
do
    local _f_s_var = explist
    while true do
       local var_1, ... , var_n = _f(_s_var)
       _var = var_1
       if _var == nil then break end
       block
    end
end

 语义实例:

function get_each_fun(array)
    local i=0
    local length=table.getn(array);
    return function(s,var)
        print(s,var)
        i=i+1;
        if i>length then
            return nil;
        else
            return i,array[i];
        end
    end,99,101
end

list={1,3,5,7,9}
for key,item in get_each_fun(list) do
end  


 

 

 

 

posted @ 2012-07-03 18:00  再快一点  阅读(215)  评论(0编辑  收藏  举报