โครงสร้างการควบคุม

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

ควบคุมโครงสร้าง เป็นข้อความที่จัดการการไหลของการประมวลผล 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 then
print("Two plus two is five") -- ไม่พิมพ์เนื่องจากเงื่อนไขเป็นปลอม
elseif 2 + 3 == 5 then
print("Two plus three is five") -- สองบวกสามคือห้า
else
print("All conditions failed") -- ไม่พิมพ์เพราะเงื่อนไขก่อนหน้านี้เป็นเงื่อนไขที่ถูกต้อง
end

ในขณะที่ Loops

A whiledo ลูปวิเคราะห์ว่าเงื่อนไขที่กำหนดเป็นจริงหรือไม่ หากเงื่อนไขเป็น false หรือ 1> nil1> ลูปจะสิ้น


local timeRemaining = 10
while timeRemaining > 0 do
print("Seconds remaining: " .. timeRemaining)
task.wait(1)
timeRemaining -= 1
end
print("Timer reached zero!")
--[[ ผลลัพธ์ออก:
Seconds remaining: 10
Seconds remaining: 9
Seconds remaining: 8
Seconds remaining: 7
Seconds remaining: 6
Seconds remaining: 5
Seconds remaining: 4
Seconds remaining: 3
Seconds remaining: 2
Seconds remaining: 1
Timer reached zero!
]]

ห่วงเหนี่ยวล้อมตลอดไป

คุณสามารถใช้วงจร whiledo เพื่อเขียนวงจรเกมไม่มีที่สิ้นสุดโดยการตั้ง true เป็นเงื่อนไข


while true do
print("Looping...")
task.wait(0.5)
end
--[[ ผลลัพธ์ออก:
Looping...
Looping...
Looping...
Looping...
...
]]

ทำซ้ำของเครื่อง

ลูปซ้ำ repeatuntil ซ้ำจนกว่าเงื่อนไขจะเป็นจริง การทดสอบความเป็นไปได้จะประเมิน หลัง ที่โคบล็อกรันจนกว่าจะเป็นเงื่อ


local currentGoblinCount = 18
-- เรียกก๊อบลินได้มากถึง 25 ในเกม
repeat
spawnGoblin()
currentGoblinCount += 1
print("Current goblin count: " .. currentGoblinCount)
until currentGoblinCount == 25
print("Goblins repopulated!")
--[[ ผลลัพธ์ออก:
Current goblin count: 19
Current goblin count: 20
Current goblin count: 21
Current goblin count: 22
Current goblin count: 23
Current goblin count: 24
Current goblin count: 25
Goblins repopulated!
]]

สำหรับ Loops

A สำหรับเครื่องมือนี้จะประมวลผลโค้ดให้ตัวเลขครั้งหนึ่งตามจำนวนเวลาที่กำหนดไว้หรือจำนวน รายการในคอลเลกชัน

ตัวเลขสำหรับลูป

A fordo ห้องนิรภัยกำหนดจำนวนครั้งในการประมวลผลห้องนิรภัยโดยใช้ตัวนับ ห้องนิรภัยจะประกาศด้วยมูลค่าเริ่มต้น มูลค่าสิ้นสุด และตัวเพิ่มเติมอย่างต่อเนื่อง

Luau ตั้งค่าตัวนับเท่ากับมูลค่าเริ่มต้น, ประมวลผลบล็อกโค้ดในวงล้อ for แล้วเพิ่มบล็อกตัวนับเข้ามา หากบล็อกเป็นบวก, ให้เท่านั้นจนกว่าบล็อกจะเป็

ตัวเพิ่มเติมตัวเลือกเริ่มต้นที่ 1 ไม่จำเป็นต้องเป็นตัวเลขทั้งหมด


for counter = 1, 3 do
print(counter)
end
--[[ ผลลัพธ์ออก:
1
2
3
]]
for counter = 1, 6, 2 do
print(counter)
end
--[[ ผลลัพธ์ออก:
1
3
5
]]
for counter = 2, 0, -0.5 do
print(counter)
end
--[[ ผลลัพธ์ออก:
2
1.5
1
0.5
0
]]

สําหรับล็อปทั่วไป

ห่วงเหลี่ยม for ทั่วไปในคอลเลกชันมากกว่าเป็นต่างๆ ของตัวเลข ด้วยห่วงเหลี่ยม for คอลเล็กชัน

สำหรับลูปต้องการฟังก์ชันหรือไอเทอร์เรเตอร์เพื่อทำซ้ำรูปแบบของคอลเลกชันที่แตกต่างกัน ลังกะ ipairs() กลับไอเทอร์เรเตอร์สำหรับรูปแ

การทําซ้ําทั่วไป

ใน Luau คุณสามารถทำซ้ำตารางโดยใช้คำสั่ง in บนตารางโดยตรงโดยไม่ต้องใช้ฟังก์ชันผู้ซ้ำตารางเช่น ipairs() :


for i, v in {1, 2, 3, 4, 5} do
print(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) do
print(index, value)
end
--[[ ผลลัพธ์ออก:
1 a
2 b
3 c
4 d
5 e
]]

สารานุกรม

คุณสมบัติ pairs() กลับรายการนับผ่านทั้งหมดในตาราง (รวมทั้งดัชนี) และกลับรายการ คีย์ และ value สำหรับแต่ละรายการในไดอารีดาร์เรียบร้อ


local dictionary = {
[1] = "a",
["Hello"] = "b",
[5] = "c",
[true] = "d",
["World"] = "f",
[false] = "e"
}
for key, value in pairs(dictionary) do
print(key, value)
end
--[[ ผลลัพธ์ออก:
Hello b
true d
false e
World f
5 c
1 a
]]

ควบคุมคำ

ของขัด

ปิด, ใช้คำสั่ง break คำ. ตัวอย่างโค้ดต่อไปแสดงให้เห็นวิธีการทำลายวงจร whiledo วงจร.


local secondsElapsed = 0
local timeout = 5
while true do
task.wait(1)
secondsElapsed += 1
print("Seconds elapsed:", secondsElapsed)
if secondsElapsed == timeout then
break
end
end
print("Five seconds elapsed. Time to move on!")
--[[ ผลลัพธ์ออก:
1
2
3
4
5
Five 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