什么叫“每次调用该函数就返回集合的下一个元素”

不多说,看图。

注意这个语句“var = var_1”

下面给出代码实例

local x = 7

local y = 666

local function fun1(e,c)

    print('入参后,变化前',e,c)

    e = e + c

    c = c + 1

    print('变化后,分支前',e,c)

    if c < 700 then

        return e,c

    else

        return nil,nil

    end

end

for k,v in fun1,x,y do

    print('完成fun1函数,运算循环体内函数',k,v)

end

当for循环开始运行后,x、y传入迭代器(当x、y都不是引用数据类型时,在循环体内改变x、y的值并不会影响循环次数,见附录),在之后的循环中,x、y不再起作用(虽然和lua手册中给出的等价代码出入有点大,但是事实上,实践证明在循环体内改变x、y的值的确不会导致输出变化,我猜测实际上迭代器为x生成了一个闭包),lua将迭代器返回的第一个值赋给k,同时也赋给它本身作为下一次运行时的参数——因为在循环体中改变k的值并不会导致下一次循环输出的值改变,所以我猜测并不是k作为入参,而是它的“缔造者”——返回值作为入参。

菜鸟教程:

注意,对于 for 结构来说,状态常量没有用处,仅仅在初始化时获取他的值并传递给迭代函数


【附录】

t = {1,2,3,4,5,6,7,8,9,0}

it ,t1,t2= ipairs(t)

for k,v in it ,t1,t2 do

    table.insert(t,10+k)

    print(k,v)

end

这真的会无限循环下去

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容