scripting, บล็อกของโค้ดเป็นตัวแทนของ โครงสร้างการควบคุม หรือ ฟังก์ชัน ตัวบล็อกของตัวแทนของตัวแปรหรือฟัง
แปรและฟังก์ชันมีขอบเขตทั่วไปโดยปกติ แต่การประกาศพวกเขาด้วยขอบเขตท้องถิ่นจะดีกว่าเสมอเพราะ Luau เข้าถึงตัวแปรและฟังก์ชันท้องถิ่นได้เร็วกว่าตัวแปรและฟังก์ชันทั่วไป
สคริปต์ไม่สามารถเข้าถึงแปรและฟังก์ชันระดับโลกและในท้องถิ่นในสคริปต์อื่น หากคุณต้องการแชร์ค่าและฟังก์ชันระหว่างสคริปต์ใช้ ModuleScripts
local helloWorld = 'Hello World!'
local function printHelloWorld()
print(helloWorld)
end
printHelloWorld() -- Hello World!
- บล็อก B สามารถเข้าถึงตัวแปรท้องถิ่นในบล็อก A ได้ * บล็อก C สามารถเข้าถึงตัวแปรและการใช้งานในบล็อก A และ B * บล็อก A ไม่สามารถเข้าถึงตัวแปรและการใช้งานในบล็อก B หรือ C ได้
- บล็อก B ไม่สามารถเข้าถึงตัวแปรท้องถิ่นในบล็อก C ได้
มุมมองทั่วถึง
หลังจากที่คุณประกาศแปรหรือฟังก์ชันระดับโลกใด ๆ ใน สคริปต์เดียวกัน สามารถเข้าถึงได้ แปรและฟังก์ชันมีขอบเขตระดับโลกยกเว้นคุณจะประกาศพวกเขาด้วยคำว่า local การ์ดของคุณ
รหัสtestVar มีสเกลทั่วโลกภายใน testFunc() ฟังก์ชัน เมื่อ Luau เรีย
Example of global functions and variables
local function testFunc() -- สเกลท้องถิ่น
testVar = 64 -- ขอบเขต global
end
testFunc()
print(testVar) -- 64
รหัส, แปร global x เริ่มที่ 0 เพิ่มขึ้นโดย 1 กับแต่ละการเรียกใช้ของ 1>2> for1> ห่วงโซจู1> และพิมพ์อีกครั้งด้วย
x = 0 -- แก้ไขตัวแปร global "x"for i = 1, 4 dox += 1print("Global 'x' = " .. x)endprint("Global 'x' = " .. x)--[[ ผลลัพธ์ออก:Global 'x' = 1Global 'x' = 2Global 'x' = 3Global 'x' = 4Global 'x' = 4]]
มันเป็นเรื่องง่ายกว่าที่จะประกาศตัวแปรและการใช้งานระดับโลก เพราะคุณไม่จำเป็นต้องพิมพ์มาก แต่ตัวแปรและการใช้งานระดับโลกมีข้อดีด้านด้านล่างเมื่อเปรียบเทียบกับตัวแปรและการใช้งานในระดับท้องถิ่น:
- Luau เข้าถึงแปรและการใช้งานระดับโลกด้วยการค้นหาแฮช การดำเนินการการใช้แปรระดับโลกในวงแหวนเวลาสามารถทำให้มันทำงานเร็วกว่าการใช้แปรระดับโลกในวงแหวนเดี
- Luau จัดการแปรงอ้างอิงในตอนท้ายของขอบเขต เพื่อลดการใช้หน่วยความจำ
- คุณสามารถเข้าถึงแปรและการใช้งานระหว่างเดียวกันในสคริปต์เดียว แต่ไม่สามารถเข้าถึงแปรหรือการใช้งานระหว่างหลายสคริปต์ได้ ดังนั้นตัวแปรหรือการใช้งานระหว่างเดียวกันจึงไม่ได้ให
สเกลท้องถิ่น
Luau สามารถเข้าถึงแปรหรือคำสั่งในบล็อกของโค้ดที่คุณประกาศได้เท่านั้น การสร้างแปรด้วยสเกลบังคับให้คุณควบคุมได้มากขึ้นเมื่อแปรมีการเปลี่ยนแปลงในเวลาและสถานที่ที่แตกต่างกัน
รหัส, ฟังก์ชั
local function testFunc() -- สเกลท้องถิ่น
local testVar = 64 -- สเกลท้องถิ่น
print(testVar) -- 64
end
testFunc()
print(testVar) -- nil
รหัสตัวแปรท้องถิ่น x มีค่า 0 ในตรวจที่ 1 สามตัวแปรท้องถิ่น x
local x = 0 -- แปรตัว "x" ท้องถิ่นfor i = 1, 4 dolocal x = 1 -- แปร "x" ที่แตกต่างกัน "สำหรับ" ห้องนี้print("Loop 'x' = " .. x)endprint("Initial 'x' = " .. x)--[[ ผลลัพธ์ออก:Loop 'x' = 1Loop 'x' = 1Loop 'x' = 1Loop 'x' = 1Initial 'x' = 0]]
การจับกุม
หลังจากที่คุณประกาศและกำหนดตั้งแป้นหลักที่เป็นตัวแปรของตัวเองและกำหนดเขตของตัวแปรที่เป็นส่วนหนึ่งของเดียวกัน เทคนิคนี้เรียกว่า การจับกุม รหัส, ฟังก์ชัน f จับตัวแปรท้องถิ่น x ตัวแปร x ใน 1> f1> เป็น 4> upvalue 4> .
local x = 5
local function f()
print(x)
end
f() -- 5
print(x) -- 5
เงา
หลังจากที่คุณประกาศและกำหนดตัวแปรให้แล้วคุณสามารถอ่านมันในระดับของมันและระดับลูกหลาน หากคุณประกาศและกำหนดตัวแปรให้แล้วในระดับ
รหัสLuau เงาตัวแปร x ตัวแปร x ใน f() เป็นตัวแปร 1>เงา1> ตัวแปร
local x = 5
local function f()
local x = 7
print(x)
end
f() -- 7
print(x) -- 5
คุณยังสามารถยกเลิกการกำหนดค่าตัวแปรในระดับของตัวแปรโดยไม่ต้องการให้มีค่าใด ๆ จึงสามารถเปลี่ยนแปลงตัวแปรในทั้งระดับของตัวแปรและระดับลูกตัวแปรได้ Redeclaring a local variable without assigning a value to it sets its value to nil
ในตัวอักษรต่อไ
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) -- มะนาว
print(fruit .. ", not " .. fruitName) -- Lemon, not Chocolate