關於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)的值,否則會有不可預知的結果。
相關推薦
關於lua數字for迴圈的實現
看以下程式碼: for i=1,2 do print(i) i=3 end 輸出是什麼?如果習慣了C/C++語言,會覺得因為改變了控制變數i為3,所以在執行第二次迴圈體之前判斷不通過,所以輸出是1。 但結果輸出是1和2,即雖然改變了i,但迴圈還是執行了2次。這是
JavaScript for迴圈實現表格隔行變色
本程式碼主要演示的是for迴圈, <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>JavaScript for迴圈實現表格隔行變色&l
用for迴圈實現九九乘法表
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css">
JAVA實現-使用for迴圈 實現九九乘法表/列印矩形-三角形-菱形
package com.company; public class Main { /** * 列印九九乘法表 * @param args */ public static void main(String[] args) { for
for迴圈實現斐波拉切數列的前N項,N由使用者輸入。
public static void main(String[] args) { System.out.println("請輸入位數:"); Scanner input = new Scanner(System.in); int N = input.nex
for迴圈實現1-100之間偶數和
package com.itheima_04; /* * 需求:求出1-100之間偶數和 * * 分析: * A:定義求和變數,初始化值是0 * B:獲取1-100之間的資料,用for迴圈實現 * C:把獲取到的資料進行判斷,看是否是偶數 *
asp.net使用for迴圈實現Datalist的分列顯示功能
伺服器控制元件雖然用起來方便,但是也犧牲了效能,有些時候用起來顯得大而無當。希望先進朋友多多指教。複製程式碼 程式碼如下: /// <summary> /// 工程業績--用for迴圈代替了DataList多列顯示,得到2行四列的表格,需要記憶體表的8行資料
用for迴圈實現斐波那契數列
斐波那契數列指的是這樣一個數列1, 1, 2, 3, 5, 8, 13, 21, 34........斐波那契數列特別指出:第1項是第一個1。這個數列從第3項開始,每一項都等於前兩項之和。下面我們來實現這個數列public static void main(String[]
【Java基礎】for迴圈實現在控制檯列印水仙花數
程式碼: /* * 需求:在控制檯輸出所有的”水仙花數” * * 分析: * 什麼是水仙花數呢? * 所謂的水仙花數是指一個三位數,其各位數字的立方和等於該數本身。 * 舉例:153就是一個水仙花數。 *
氣泡排序—for迴圈實現
//#include<iostream> #include<stdio.h> #include<stdlib.h> void main() { int a
JS雙重for迴圈實現氣泡排序
一、交換變數 由於氣泡排序需要用到交換變數,所以需要掌握交換變數的原理 假設,左手裡拿了一個蘋果,右手裡拿了一個橘子,想要蘋果和橘子調換位置,要怎麼做?可見,需要先騰出一隻手。 例如: 1、先把左手蘋果放到桌子上 2、把右手橘子給左手 3、右手再拿起桌子上的蘋果
遞迴和for迴圈實現1+2+3+...+100
#include<stdio.h> //在一個函式體內呼叫自身稱為稱為函式的遞迴呼叫 //遞迴實現1+2+。。。+100 int addNum(int n) { if(n==0) { return 0; } return addNum(n-1)+
lua的for迴圈
lua的三種for迴圈介紹,本文的lua程式碼編輯於luaforwindows: 1:數值for迴圈,如圖: 舉例如下: 2:ipairs迭代器: 舉例如下: 說明:ipairs按照索引值順序,
用java的for迴圈實現列印上下兩個正反三角形
程式碼如下: import java.util.*; public class Circle { public static void main(String args[]) { int n
(3)C#for迴圈實現氣泡排序
class Program { static void Main(string[] args) { int[] a = { 15,17,3,4,4,19,6,7,11,9,10}; //
1.用while,do while,for迴圈實現100以內(含100)的偶數加和
//1.while迴圈 int i=0; int sum=0; while(i<=100){ i++; if(i%2==0){
for迴圈實現1-10的相加
/* * 使用for迴圈去實現求和思想: * 需求:求1~10之間的和 * 分析: * 0+1 =1 * 1 + 2 =3 * 3 +3 = 6 * 6 + 4 = 10 * ...... * * 兩個加數:第一個加數是每次相加之後的和, *
JAVA list+for迴圈實現分頁
程式碼實現 List list(查詢出來的結果集) list listResualt (返回的結果集)。 for(int i(起始頁);i<list.length<結束頁?list.l
JAVA - 一個for迴圈實現99乘法表
public class Test03 {public static void main(String[] args) { int lie = 1; for (int hang = 1; hang<=9;) { System.out.print(lie+"*"+
Lua for 迴圈
Lua 程式語言中 for 迴圈語句可以重複執行指定語句,重複次數可在 for 語句中控制。 Lua 程式語言中 for語句有兩大類:: 數值for迴圈 泛型for迴圈 數值for迴圈 Lua 程式語言中數值for迴圈語法格式: for var=exp1,ex