ควบคุมโครงสร้าง เป็นข้อความที่จัดการการไหลของการประมวลผล Luau มีสี่ประเภทหลักของโครงสร้างการควบคุม:
- ประโยค ถ้า อื่น ๆ จะประมวลผลโค้ดเฉพาะเมื่อเงื่อนไขที่กำหนดไว้คือ true เท่านั้น การประมวลผลโค้ดจะไม่ทำซ้ำ
- A ในขณะที่เรียกใช้โค้ดเฉพาะเมื่อเงื่อนไขที่กำหนดไว้คือ <a href="/reference/engine/databases">เป็น</a> และทำซ้ำการดำเนินการในขณะที่เงื่อนไขยังคงเป็น <a href="/reference/engine/databases">เป็น</a>
- ซ้ำ เเบบเเห่งห่วงโซ่ รหัสและทำซ้ำการประมวลผลหากเงื่อนไขคือ true
- สำหรับวงจร ที่เรียกใช้โค้ดเป็นจำนวนครั้งที่กำหนดไว้ขึ้นอยู่กับการป้อนข้อมูล
เงื่อนไขสำหรับ if ข้อความ, while ลูป, และ repeat ลูปสามารถเป็น Luau การแสดงผลใด ๆ ห
ถ้าคำ
ประโยคที่พื้นฐาน if ทดสอบสถานะของมัน หากสถานะเป็นจริง Luau จะดำเนินการโค้ดระหว่าง then และ end
คุณสามารถใช้ประโยค elseif เพื่อทดสอบสำหรับเงื่อนไขเพิ่มเติมหากเงื่อนไข if ล้
ในช่วงของ if , elseif และ else เงื่อนไข, Luau ทดสอบเงื่อนไขจากด้านบนสุด 1> true1> เงื่อนไข, หยุดที่สถานะแรก 4> alf4> เงื่อนไข, และดำเนินการโค้ดที่ต
if 2 + 2 == 5 thenprint("Two plus two is five") -- ไม่พิมพ์เนื่องจากเงื่อนไขเป็นปลอมelseif 2 + 3 == 5 thenprint("Two plus three is five") -- สองบวกสามคือห้าelseprint("All conditions failed") -- ไม่พิมพ์เพราะเงื่อนไขก่อนหน้านี้เป็นเงื่อนไขที่ถูกต้องend
ในขณะที่ Loops
A while — do ลูปวิเคราะห์ว่าเงื่อนไขที่กำหนดเป็นจริงหรือไม่ หากเงื่อนไขเป็น false หรือ 1> nil1> ลูปจะสิ้น
local timeRemaining = 10while timeRemaining > 0 doprint("Seconds remaining: " .. timeRemaining)task.wait(1)timeRemaining -= 1endprint("Timer reached zero!")--[[ ผลลัพธ์ออก:Seconds remaining: 10Seconds remaining: 9Seconds remaining: 8Seconds remaining: 7Seconds remaining: 6Seconds remaining: 5Seconds remaining: 4Seconds remaining: 3Seconds remaining: 2Seconds remaining: 1Timer reached zero!]]
ห่วงเหนี่ยวล้อมตลอดไป
คุณสามารถใช้วงจร while — do เพื่อเขียนวงจรเกมไม่มีที่สิ้นสุดโดยการตั้ง true เป็นเงื่อนไข
while true doprint("Looping...")task.wait(0.5)end--[[ ผลลัพธ์ออก:Looping...Looping...Looping...Looping......]]
ทำซ้ำของเครื่อง
ลูปซ้ำ repeat — until ซ้ำจนกว่าเงื่อนไขจะเป็นจริง การทดสอบความเป็นไปได้จะประเมิน หลัง ที่โคบล็อกรันจนกว่าจะเป็นเงื่อ
local currentGoblinCount = 18-- เรียกก๊อบลินได้มากถึง 25 ในเกมrepeatspawnGoblin()currentGoblinCount += 1print("Current goblin count: " .. currentGoblinCount)until currentGoblinCount == 25print("Goblins repopulated!")--[[ ผลลัพธ์ออก:Current goblin count: 19Current goblin count: 20Current goblin count: 21Current goblin count: 22Current goblin count: 23Current goblin count: 24Current goblin count: 25Goblins repopulated!]]
สำหรับ Loops
A สำหรับเครื่องมือนี้จะประมวลผลโค้ดให้ตัวเลขครั้งหนึ่งตามจำนวนเวลาที่กำหนดไว้หรือจำนวน รายการในคอลเลกชัน
ตัวเลขสำหรับลูป
A for — do ห้องนิรภัยกำหนดจำนวนครั้งในการประมวลผลห้องนิรภัยโดยใช้ตัวนับ ห้องนิรภัยจะประกาศด้วยมูลค่าเริ่มต้น มูลค่าสิ้นสุด และตัวเพิ่มเติมอย่างต่อเนื่อง
Luau ตั้งค่าตัวนับเท่ากับมูลค่าเริ่มต้น, ประมวลผลบล็อกโค้ดในวงล้อ for แล้วเพิ่มบล็อกตัวนับเข้ามา หากบล็อกเป็นบวก, ให้เท่านั้นจนกว่าบล็อกจะเป็
ตัวเพิ่มเติมตัวเลือกเริ่มต้นที่ 1 ไม่จำเป็นต้องเป็นตัวเลขทั้งหมด
for counter = 1, 3 doprint(counter)end--[[ ผลลัพธ์ออก:123]]for counter = 1, 6, 2 doprint(counter)end--[[ ผลลัพธ์ออก:135]]for counter = 2, 0, -0.5 doprint(counter)end--[[ ผลลัพธ์ออก:21.510.50]]
สําหรับล็อปทั่วไป
ห่วงเหลี่ยม for ทั่วไปในคอลเลกชันมากกว่าเป็นต่างๆ ของตัวเลข ด้วยห่วงเหลี่ยม for คอลเล็กชัน
สำหรับลูปต้องการฟังก์ชันหรือไอเทอร์เรเตอร์เพื่อทำซ้ำรูปแบบของคอลเลกชันที่แตกต่างกัน ลังกะ ipairs() กลับไอเทอร์เรเตอร์สำหรับรูปแ
การทําซ้ําทั่วไป
ใน Luau คุณสามารถทำซ้ำตารางโดยใช้คำสั่ง in บนตารางโดยตรงโดยไม่ต้องใช้ฟังก์ชันผู้ซ้ำตารางเช่น ipairs() :
for i, v in {1, 2, 3, 4, 5} doprint(i, v)end
การทําซ้ําทั่วไปยังช่วยให้คุณใช้ metamethode ของ __iter เพื่อสร้างฟังก์ชันใหม่ ตัวอย่างนี้ทําซ้ําไปที่หน้ารายการในลําดับกลับไปยังองค์ประกอบล่าสุดของมันไปยังองค์ประกอบแรก:
local myTable = {1, 2, 3, 4, 5}
myMetatable = {
__iter = function(t)
local i = #t + 1
return function()
i -= 1
if i > 0 then
return i, t[i]
end
end
end,
}
setmetatable(myTable, myMetatable)
for i, v in myTable do
print(i, v)
end
--[[ ผลลัพธ์ออก:
5 5
4 4
3 3
2 2
1 1
]]
รายการ
การใช้งาน ipairs() ระบุตัวเลขในตารางและการนับผ่าน index และ value สำหรับแต่ละรายการ ทำให้เหมาะสมกับรายการ ที่มีทุกรายการเป็นตัวเลข
local array = {"a", "b", "c", "d", "e"}for index, value in ipairs(array) doprint(index, value)end--[[ ผลลัพธ์ออก:1 a2 b3 c4 d5 e]]
สารานุกรม
คุณสมบัติ pairs() กลับรายการนับผ่านทั้งหมดในตาราง (รวมทั้งดัชนี) และกลับรายการ คีย์ และ value สำหรับแต่ละรายการในไดอารีดาร์เรียบร้อ
local dictionary = {[1] = "a",["Hello"] = "b",[5] = "c",[true] = "d",["World"] = "f",[false] = "e"}for key, value in pairs(dictionary) doprint(key, value)end--[[ ผลลัพธ์ออก:Hello btrue dfalse eWorld f5 c1 a]]
ควบคุมคำ
ของขัด
ปิด, ใช้คำสั่ง break คำ. ตัวอย่างโค้ดต่อไปแสดงให้เห็นวิธีการทำลายวงจร while — do วงจร.
local secondsElapsed = 0local timeout = 5while true dotask.wait(1)secondsElapsed += 1print("Seconds elapsed:", secondsElapsed)if secondsElapsed == timeout thenbreakendendprint("Five seconds elapsed. Time to move on!")--[[ ผลลัพธ์ออก:12345Five seconds elapsed. Time to move on!]]
ห่วงเนื่องต่อ
เพื่อบังคับให้เปิดห่วงโซ่และเริ่มใหม่ในรอบนี้ใช้คำว่า continue คำว่า for และคำว่า while —
local function GetChildrenOfClass(parent: Instance, className: string): {Instance}
local children = {}
for _, child in parent:GetChildren() do
if child.ClassName ~= className then continue end -- ทำซ้ำสัญลักษณ์
table.insert(children, child)
end
return children
end