スコープとブロック
CoddyのLuaジャーニー「基礎」セクションの一部。レッスン 86/90。
Luaでは、do...endブロックを使って、コード内のどこにでも新しいスコープを作成できます。これらのブロックを使うと、ローカル変数にアクセスできる場所を正確に制御でき、変数のスコープを細かく管理できます。
do...endブロックを使って新しいスコープを作成する方法は次のとおりです。
local outerVar = "I'm outside"
do
local innerVar = "I'm inside"
print(outerVar) -- これは動作します
print(innerVar) -- これも動作します
end
print(outerVar) -- これは動作します
print(innerVar) -- nil が出力されます: innerVar はブロック内にしか存在しませんスコープの強力な点は、異なるブロック内で同じ名前のローカル変数を使うことができ、それぞれが完全に独立していることです。
local name = "Alice"
do
local name = "Bob" -- 別の変数!
print(name) -- "Bob"を出力する
end
print(name) -- "Alice"を出力する各do...endブロックは、ローカル変数のための独立した環境を作成します。ブロック内で宣言された変数は外側のスコープに出ることはできませんが、外側のスコープの変数には内側のブロックからアクセスできます。
チャレンジ
簡単スコープの異なる場所で同じ名前のローカル変数が完全に別々に扱われることを示すため、入れ子になった do...end ブロックを作成します。
まず、外側のスコープで playerLevel という名前のローカル変数を値 10 で作成し、出力します。
次に、do...end ブロックを作成し、その中で次の操作を行います。
playerLevelという名前の新しいローカル変数を値25で宣言します- この内側の
playerLevelを出力します
内側のブロックが終わった後、外側の playerLevel をもう一度出力し、値が変わっていないことを示します。
これにより、異なるスコープにある同じ名前のローカル変数は完全に独立しており、内側の変数が外側の変数に影響しないことがわかります。
自分で試してみよう
-- TODO: ここにコードを書いてくださいこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Luaオンラインコンパイラ