编辑: 鱼饵虫 | 2019-07-06 |
1 while myNumber <
10 do print( myNumber ) myNumber = myNumber +
1 end repeat 会在每一次执行后才去判断要不要继续执行: myNumber =
1 repeat print( myNumber ) myNumber = myNumber +
1 until myNumber ==
10 for 透过对数值的操作:像是累加或递减,以决定要如何重复执行一段程式码, 程式码将执行到该数值到达设定的限制为止: for myValue = 1,
10 do print( myValue ) end 这个 loop 会印出数字
1 ~ 10,你也可以指定第三个参数,让该值每次以非
1 的差 距累加或递减: 回圈 (Loop)
17 for myValue = 10, 1, -1 do print( myValue ) end 这段程式码会依序将
10 ~
1 印出,每次以
1 的差距递减.当然你也可以根渌 值去递减,像是 -12 或是 0.75 接著我们来看看下面的状况: myValue =
100 for myValue = 1,
10 do print( myValue ) end print( myValue ) 当你去执行这段程式码,可能会觉得很奇怪.首先 for 回圈中的 print() 会 依序印出 1~10 ,但是最后的 print() 却会印出 100.这是由於 scope 的特性与 for 回圈中发生的特殊现象导致的.定义在 for 回圈中,作为累加器的变数对为 本地 ( local ) 变数,只有在 for 回圈内的程式码区块存取得到.当离开 for 回圈时,存取的自然就是原始版本的变数了 (第一行定义的变数). 回圈 (Loop)
18 围 (Scope) 每个变数都有围 (Scope) 与可见性 (Visibility),所谓的可见性是指:该变数能否 被看见,而所谓的围是指该变数 在哪里能被看见 .在 Lua 中,根涫墓 围,可以将变数分为两种类型:区域 (Local) 与 全域 (Global)变数.没有前缀词定 义的变数皆为全域 (Global) 变数: myNumber =
12 全域变数可以在程式码的任何地方 较低的效率 相较於区域变数,它们没办法有效率的被处理,这是因为全域变数会被加入到一个 名为 _G 的表格里,存取全域变数都需要额外的步骤去操作这张表格. 容易导致难以追踪的臭虫 (Bug) 因为全域变数可以在程式的任何地方被使用,你的夥伴可以在程式的任何一个复写 你之前宣告的全域变数.当臭虫发生的时候,也因为全域变数可以在任何地方被看 见的特性,很难去追中全域变数随著程式运作的变化 记忆体泄漏 (Memory leak) 围 (Scope)
19 记忆体泄漏是由於程式撰写不当,参考已经没有在使用的物件,导致垃圾回收器 (gabage collector) 无法回收没有在使用的记忆体,让可用记忆体越来越少的现象. 由於全域变数会被 _G 这个表格参考,他没办法随著一个区域的结束而被回收. 能够回收全域变数的方法只有将它设置为 nil,然而这个步骤是多数开发者容易疏忽 的,也因此容易导致记忆体泄漏. 另一个变数种类则是区域 (Local) 变数,区域变数定义时会被前缀词 local 所修........