通常、変数はローカルと宣言します。そして、はい、for
ループは独自の範囲を作成します。これはより良いコーディングスタイルであり、この例のように、通常はより最適化されています。あなたが見ることができるように
main <t.lua:0,0> (11 instructions at 0000000000538260)
0+ params, 7 slots, 1 upvalue, 5 locals, 5 constants, 0 functions
1 [1] LOADK 0 -1 ; 0
2 [1] LOADK 1 -2 ; 255
3 [1] LOADK 2 -3 ; 1
4 [1] FORPREP 0 5 ; to 10
5 [2] GETTABUP 4 0 -4 ; _ENV "math"
6 [2] GETTABLE 4 4 -5 ; "random"
7 [2] LOADK 5 -1 ; 0
8 [2] LOADK 6 -2 ; 255
9 [2] CALL 4 3 2
10 [1] FORLOOP 0 -6 ; to 5
11 [3] RETURN 0 1
:
main <t.lua:0,0> (13 instructions at 00000000005e8260)
0+ params, 8 slots, 1 upvalue, 5 locals, 5 constants, 0 functions
1 [1] LOADNIL 0 0
2 [2] LOADK 1 -1 ; 0
3 [2] LOADK 2 -2 ; 255
4 [2] LOADK 3 -3 ; 1
5 [2] FORPREP 1 6 ; to 12
6 [3] GETTABUP 5 0 -4 ; _ENV "math"
7 [3] GETTABLE 5 5 -5 ; "random"
8 [3] LOADK 6 -1 ; 0
9 [3] LOADK 7 -2 ; 255
10 [3] CALL 5 3 2
11 [3] MOVE 0 5
12 [2] FORLOOP 1 -7 ; to 6
13 [4] RETURN 0 1
二枚を:
はのは、2つのコードが最初の作品luac -l
で、生成されているどのような指示を見てみましょう。最初の部分には2つの追加の指示があります。そのうちの一つは、ループ内にある:これは何
11 [3] MOVE 0 5
は、変数t
がどこにあるかであるレジスタ0
()に、math.random
の結果を持っているレジスタ5
(に結果を移動することであり、
いいえ、ループには独自のスコープがあり、外側スコープからのローカル変数へのアクセスは遅くなりますが、外側スコープからのローカル変数へのアクセスはグローバル変数へのアクセスよりも遅いですか? – user6245072
上記のコードでは、ループの外側で 'local rand = math random'を宣言し、ループの中で' rand'を呼び出すことは可能ですか? – user6245072
@ user6245072答えははいです。ループが長い場合は、ループ外のローカル変数に関数を割り当てるとパフォーマンスが向上します。これに関する詳細は[* Lua Programming Gems *](http://www.lua.org/gems/)の第2章で解説しています。 –