スコープとブロック
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) -- これはエラーになります!スコープの強力な点は、異なるブロック内で同じ名前のローカル変数を持つことができ、それらが完全に分離された状態に保たれることです。
local name = "Alice"
do
local name = "Bob" -- 別の変数です!
print(name) -- "Bob" を出力します
end
print(name) -- "Alice" を出力します各 do...end ブロックは、ローカル変数用に独自の分離された環境を作成します。ブロック内で宣言された変数は外部スコープに漏れることはありませんが、外部スコープの変数は内部ブロック内からアクセスできます。
チャレンジ
簡単ネストされた do...end ブロックを作成して、同じ名前を持つローカル変数が異なるスコープでどのように完全に分離されたままになるかを実証してください。
まず、外部スコープで値が 10 の playerLevel という名前のローカル変数を作成し、それを表示します。
次に、do...end ブロックを作成し、その中で以下を行います:
- 同じく
playerLevelという名前で、値が25の新しいローカル変数を宣言します - この内部の
playerLevelを表示します
内部ブロックが終了した後、外部の playerLevel を再度表示して、それが変更されていないことを示します。
これは、異なるスコープにある同一名のローカル変数が完全に独立していること、つまり内部の変数が外部の変数に影響を与えないことを示しています。
自分で試してみよう
-- TODO: ここにコードを書いてくださいこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。