zoukankan      html  css  js  c++  java
  • 关于lua数字for循环的实现

    看以下代码:

    for i=1,2 do
      print(i)
      i=3
    end


    输出是什么?如果习惯了C/C++语言,会觉得因为改变了控制变量i为3,所以在执行第二次循环体之前判断不通过,所以输出是1。

    但结果输出是1和2,即虽然改变了i,但循环还是执行了2次。这是为什么呢?

    看了lua的源代码,发现在语法分析阶段,表达式中的i(也叫控制变量)和循环体中的i并不是一个值,其实表达式中的i叫internal index,循环体中的i叫external index。

    所以在循环体中并没有改变表达式中的i的值。

    至于为什么lua要这样做,估计是为了安全吧,怕在循环体中不经意地改变了表达式的i,从而产生bug。

    另外,在Progammming in Lua一书中也提到不要在循环体内修改控制变量(实际修改的是external index)的值,否则会有不可预知的结果。

  • 相关阅读:
    Docker底层技术了解(3)
    Docker整体结构了解(2)
    Docker简介(1)
    linux常用命令
    python反射
    flask线程隔离技术
    flask核心机制
    并发编程
    socket通信
    网络编程
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3095756.html
Copyright © 2011-2022 走看看