scriptingหรือฟังก์ชัน หรือ ฟังก์ชันขอบเขต ของตัวแปรหรือฟังก์ชันคือบล็อกโค้ดที่สามารถเข้าถึงได้และสามารถเป็น ทั่วโลก หรือ ท้องถิ่น บล็อกทั้งหมดสามารถเข้าถึงตัวแปรและฟังก์ชันทั่วโลกได้บล็อกสามารถเข้าถึงตัวแปรและฟังก์ชันท้องถิ่นในบล็อกพ่อของมัน แต่ไม่ใช่ในบล็อกลูกใดๆ
ตัวแปรและฟังก์ชันมีขอบเขตทั่วโลกโดยค่าเริ่มต้น แต่มักจะดีกว่าที่จะประกาศพวกเขาด้วยขอบเขตท้องถิ่นเพราะ Luau เข้าถึงตัวแปรและฟังก์ชันท้องถิ่นได้เร็วกว่าตัวแปรและฟังก์ชันทั่วโลกเพื่อให้ความหมายหรือฟังก์ชันของตัวแปรมีขอบเขตท้องถิ่น ให้ใส่คีย์เวิร์ด local ก่อนชื่อเมื่อคุณประกาศมัน
สคริปต์ไม่สามารถเข้าถึงตัวแปรหรือฟังก์ชันทั่วไปและท้องถิ่นในสคริปต์อื่นได้หากต้องการแบ่งปันค่าและฟังก์ชันระหว่างสคริปต์ใช้ 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 เรียก testFunc() มันจะกำหนดค่า testVar ค่า 64ส่วน testVar มีขอบเขตทั่วโลกดังนั้นฟังก์ชัน print() ด้านนอก testFunc() สามารถเข้าถึงและพิมพ์ 64 ได้
Example of global functions and variables
local function testFunc() -- ขอบเขตท้องถิ่น
testVar = 64 -- ขอบเขตทั่วโลก
end
testFunc()
print(testVar) -- 64
ในรหัสต่อไปนี้ ตัวแปรทั่วไป เริ่มต้นที่ เพิ่มขึ้นโดย ในแต่ละรอบของลูป และพิมพ์อีกครั้งในภายหลังด้วยค่าสุดท้าย 4
x = 0 -- ตัวแปรทั่วโลก "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 การดำเนินการดังนั้นจึงมีราคาแพงในแง่ของประสิทธิภาพการใช้ตัวแปรทั่วโลกในลูปที่สำคัญต่อเวลาสามารถทำให้มันทำงานช้ากว่า 10% จากการใช้ตัวแปรท้องถิ่นในลูปเดียวกัน
- Luau กำจัดตัวแปรท้องถิ่นหลังสิ้นสุดขอบเขตของพวกเขา ลดการใช้หน่วยความจํา
- คุณสามารถเข้าถึงตัวแปรและฟังก์ชันทั่วโลกภายในสคริปต์เดียวกัน แต่ไม่ระหว่างสคริปต์หลายตัวดังนั้นตัวแปรหรือฟังก์ชันระดับโลกจะไม่ให้ประโยชน์ใดๆ เหนือตัวเทียบท้องถิ่นในขอบเขต หรือ upvalue หรือเงา
ขอบเขตท้องถิ่น
Luau สามารถเข้าถึงตัวแปรหรือฟังก์ชันท้องถิ่นได้เฉพาะในบล็อกของโค้ดที่คุณประกาศไว้การสร้างตัวแปรด้วยขอบเขตท้องถิ่นทำให้คุณมีการควบคุมอย่างใกล้ชิดเกี่ยวกับเมื่อและที่ค่าของมันเปลี่ยนแปลง
ในรหัสต่อไปนี้ฟังก์ชัน testFunc() และตัวแปร testVar มีขอบเขตท้องถิ่นเฉพาะโค้ดภายใน testFunc() เท่านั้นที่สามารถเข้าถึงตัวแปร testVar ได้ตัวแปร testVar ไม่มีค่าอยู่นอก testFunc() ดังนั้นการเรียก print(testVar) ภายใน testFunc() จะพิมพ์ค่าของ testVar แต่การเรียก print(testVar) นอก testFunc() จะพิมพ์ nil
local function testFunc() -- ขอบเขตท้องถิ่น
local testVar = 64 -- ขอบเขตท้องถิ่น
print(testVar) -- 64
end
testFunc()
print(testVar) -- nil
ในรหัสต่อไปนี้ ตัวแปรท้องถิ่น x มีค่า 0 ในบรรทัดที่ 1ในขณะที่ Luau ซ้ำผ่านลูป โดยตัวแปรท้องถิ่นที่แตกต่างกัน มีค่า จากนั้น Luau จะพิมพ์ตัวแปรเริ่มต้น x ด้วยค่าที่ไม่เปลี่ยนแปลง 0
local x = 0 -- ตัวแปรท้องถิ่น "x"for i = 1, 4 dolocal x = 1 -- แปรที่แตกต่าง "x" ท้องถิ่นสำหรับลูป "for" นี้print("Loop 'x' = " .. x)endprint("Initial 'x' = " .. x)--[[ ผลผลิตที่ได้:Loop 'x' = 1Loop 'x' = 1Loop 'x' = 1Loop 'x' = 1Initial 'x' = 0]]
จับ
หลังจากที่คุณประกาศและกำหนดตัวแปรท้องถิ่นแล้ว คุณสามารถอ่านได้ในระดับขอบเขตและฟังก์ชันที่ขอบเขตของมันถูกปิดโดยขอบเขตเดียวกันที่มีตัวแปรท้องถิ่นเทคนิคนี้เรียกว่า การจับ ในรหัสต่อไปนี้ฟังก์ชัน f จะจับค่าตัวแปรท้องถิ่น xตัวแปร x ใน f() เป็น upvalue
local x = 5
local function f()
print(x)
end
f() -- 5
print(x) -- 5
เงา
หลังจากที่คุณประกาศและกำหนดตัวแปรท้องถิ่นแล้ว คุณสามารถอ่านได้ในระดับขอบเขตและระดับขอบเขตลูกหลานหากคุณประกาศและกำหนดใหม่ตัวแปรในระดับของลูกหลานแล้ว คุณจะสร้างตัวแปรท้องถิ่นใหม่ที่มีชื่อเดียวกัน แต่มีค่าที่แตกต่างจากการจัดสรรครั้งล่าสุดตัวแปรท้องถิ่นใหม่ไม่ส่งผลต่อตัวแปรท้องถิ่นจากการจัดสรรครั้งก่อนเทคนิคนี้ซึ่งเรียกว่า การเงา ช่วยให้คุณสามารถใช้ซ้ำชื่อของตัวแปรโดยไม่ต้องใช้ค่าของมัน
รหัสLuau เงาแปร x ค่าแปร x ใน f() เป็นค่าแปรเงา ****
local x = 5
local function f()
local x = 7
print(x)
end
f() -- 7
print(x) -- 5
คุณยังสามารถระบุค่าใหม่ให้กับตัวแปรท้องถิ่นได้โดยไม่ต้องกำหนดค่าให้กับมันเพื่อให้คุณสามารถกำหนดค่าตัวแปรใหม่ได้ทั้งในระดับขอบเขตและระดับลูกหลานการเรียกคืนตัวแปรท้องถิ่นโดยไม่กำหนดค่าให้มันมีค่าจะตั้งค่าค่าของมันเป็น nil
ในรหัสต่อไปนี้ Luau เงาตัวแปรท้องถิ่น fruitName ในฟังก์ชัน getFruitByColor()ฟังก์ชันระบุใหม่ fruitName เป็นตัวแปรเงาใหม่และตั้งค่าค่าของมันเป็น nilฟังก์ชันมีระดับสเกลลูกหลาน, ลูป ที่กำหนดค่าให้กับ ซึ่งจะกำหนดค่าให้กับ หลังจากลูป for ฟังก์ชันจะคืนตัวแปรเงา fruitNameตลอดทั้งฟังก์ชัน, fruitName เป็นตัวแปรท้องถิ่นเดียวกันที่ไม่เขียนทับตัวแปรท้องถิ่นเริ่มต้น fruitName
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