Penglihatan

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

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 do
x += 1
print("Global 'x' = " .. x)
end
print("Global 'x' = " .. x)
--[[ HasilOutput:
Global 'x' = 1
Global 'x' = 2
Global 'x' = 3
Global 'x' = 4
Global '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.
  • Anda dapat mengakses variabel dan fungsi global dalam script yang sama, tetapi tidak di antara beberapa script. Oleh karena itu, variabel global atau fungsi tidak memberikan manfaat apa pun di atas ekivalen lokal, upvalue , atau shadow.

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 do
local x = 1 -- Berbagai variabel "x", lokal untuk "for" loop ini
print("Loop 'x' = " .. x)
end
print("Initial 'x' = " .. x)
--[[ HasilOutput:
Loop 'x' = 1
Loop 'x' = 1
Loop 'x' = 1
Loop 'x' = 1
Initial '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