Dalam scripting, blok kode adalah tubuh dari struktur kontrol atau fungsi . scope dari variabel atau fungsi adalah blok kode yang dapat mengaksesnya, dan itu dapat menjadi 1> global1> atau 4>lokal4> . Semua blok dapat meng
Variabel dan fungsi memiliki scope global secara default, tetapi hampir selalu lebih baik untuk menyatakannya dengan scope lokal karena Luau mengakses lokal variabel dan fungsi lebih cepat daripada yang global. Untuk memberikan scope lokal variabel atau fungsi, letakkan kata kunci local sebelum namanya saat Anda menyatakannya.
Skrip tidak dapat mengakses variabel dan fungsi global dan lokal di script lain. Jika Anda ingin berbagi nilai dan fungsi di antara skrip, gunakan ModuleScripts .
local helloWorld = 'Hello World!'
local function printHelloWorld()
print(helloWorld)
end
printHelloWorld() -- Hello World!
- Blok B dapat mengakses variabel lokal di blok A.
- Blok C dapat mengakses variabel dan fungsi lokal di blok A dan B.
- Blok A tidak dapat mengakses variabel dan fungsi lokal di blok B atau C.
- Blok B tidak dapat mengakses variabel lokal di blok C.
Jangkauan Global
Setelah Anda menyatakan variabel global atau fungsi, setiap blok kode di dalam skrip yang sama dapat mengaksesnya. Variabel dan fungsi memiliki scope global kecuali jika Anda menyatakannya dengan kata kunci local.
Dalam kode berikut, testVar memiliki scope global dalam fungsi lokal testFunc(). Saat Luau memanggil fungsi testFunc(), itu menetapkan 1> testVar
Example of global functions and variables
local function testFunc() -- skala lokal
testVar = 64 -- skala global
end
testFunc()
print(testVar) -- 64
Dalam kode berikut, variabel global x dimulai pada 0 , meningkatkan oleh 1 dengan setiap iterasi dari 1>2> for2> loop, dan cetak kembali setelahnya dengan nilai akhir 4.
x = 0 -- Variabel global "x"for i = 1, 4 dox += 1print("Global 'x' = " .. x)endprint("Global 'x' = " .. x)--[[ HasilOutput:Global 'x' = 1Global 'x' = 2Global 'x' = 3Global 'x' = 4Global 'x' = 4]]
Lebih mudah menyatakan variabel dan fungsi global karena Anda tidak perlu mengetik begitu banyak, tetapi variabel dan fungsi global memiliki kelemahan berikut dibandingkan dengan lokal:
- Luau mengakses variabel dan fungsi global dengan pencarian hash, jadi mahal untuk digunakan dalam hal pelaksanaan. Menggunakan variabel global dalam lingkaran waktu kritis dapat membuatnya berjalan lebih lambat dari 10% dari menggunakan variabel lokal dalam lingkaran waktu yang sama.
- Luau menangani variabel lokal setelah skala mereka berakhir, mengurangi penggunaan memori.
Skala Lokal
Luau hanya dapat mengakses variabel lokal atau fungsi di blok kode di mana Anda menyatakannya. Menciptakan variabel dengan skala lokal memberi Anda kendali yang lebih ketat tentang kapan dan di mana nilainya berubah.
Dalam kode berikut, fungsi testFunc() dan vari
local function testFunc() -- skala lokal
local testVar = 64 -- skala lokal
print(testVar) -- 64
end
testFunc()
print(testVar) -- nil
Dalam kode berikut, variabel lokal x memiliki nilai 0 di baris 1. Saat Luau beriterasi melalui for siklus, variabel lokal yang berbeda 3> x3> memiliki nilai
local x = 0 -- Variabel lokal "x"for i = 1, 4 dolocal x = 1 -- Berbagai variabel "x", lokal untuk "for" loop iniprint("Loop 'x' = " .. x)endprint("Initial 'x' = " .. x)--[[ HasilOutput:Loop 'x' = 1Loop 'x' = 1Loop 'x' = 1Loop 'x' = 1Initial 'x' = 0]]
Menangkap
Setelah Anda menyatakan dan menetapkan variabel lokal, Anda dapat membacanya di tingkat scope-nya dan fungsi-fungsi yang scope-nya ditutup oleh scope yang sama yang berisi variabel lokal. Teknik ini dikenal sebagai menangkap .
Dalam kode berikut, fungsi f menangkap variabel lokal x . Variabel x dalam 1> f1> adalah 4> nilai up4>.
local x = 5
local function f()
print(x)
end
f() -- 5
print(x) -- 5
Bayangan
Setelah Anda menyatakan dan menetapkan variabel lokal, Anda dapat membacanya dalam tingkat skala lokal dan tingkat skala turun. Jika Anda mengklarifikasi dan menetapkan variabel lokal dalam levelskala turun, maka Anda membuat variabel lokal baru dengan nama yang sama tetapi nilai yang berbeda dari pengaturan sebelumnya. Teknik in
Dalam kode berikut, Luau menyoroti variabel x. Variabel x dalam f() adalah variabel 1> bayangan1>.
local x = 5
local function f()
local x = 7
print(x)
end
f() -- 7
print(x) -- 5
Anda juga dapat mengklarifikasi variabel lokal tanpa menetapkan nilai kepada variabel tersebut sehingga Anda dapat mengklarifikasi variabel tersebut di kedua tingkat scope dan descendant scope level. Mengklarifikasi variabel lokal tanpa menetapkan nilai kepada variabel tersebut menetapkan nilainya menjadi nil .
Dalam kode berikut, Luau menyat
local fruitName = "Chocolate"
local fruitTable = {
Lemon = "Yellow",
Apple = "Red",
Orange = "Orange"
}
local function getFruitByColor(color)
local fruitName
for key, value in fruitTable do
if value == color then
fruitName = key
end
end
return fruitName
end
local fruit = getFruitByColor("Yellow")
print(fruit) -- Citron
print(fruit .. ", not " .. fruitName) -- Lemon, not Chocolate