Cấu hình kiểm soát là những tuyên bố quản lý dòng chảy của thực hiện mã Luau. Có bốn loại chính của cấu hình kiểm soát:
- Một if then else tuyên bố thi hành mã chỉ nếu một điều kiện được xác định là true . Việc thi hành mã không lặp lại.
- Một while loop thực hiện mã chỉ nếu một điều kiện được xác định là true và lặp lại thực hiện mã trong khi điều kiện vẫn là true .
- Một lặp lại loop thi động mã, và lặp lại thi động nếu điều kiện là true .
- Một for loop thiết bị thi hành mã một set number of times depending on specified inputs.
Điều kiện cho các if tuyên bố, while lặp và repeat lặp có thể là bất kỳ biểu tượng Luau hoặc giá trị. Nếu một biểu tượng khô
Nếu Tuyên Bố
Các điều kiện if cơ bản kiểm tra điều kiện của nó. Nếu điều kiện là đúng, thì Luau thi động mã giữa then và end.
Bạn có thể sử dụng một elseif điều kiện để kiểm tra cho các điều kiện bổ sung nếu điều kiện if if điều
Trong một chuỗi các if, elseif, và else điều kiện, Luau kiểm tra các điều kiện từ trên xuống dưới, dừng ở điều kiện đầu tiên 1>truong1> và thi행 4>giải4> mã sau đó.
if 2 + 2 == 5 thenprint("Two plus two is five") -- Không in vì điều kiện là saielseif 2 + 3 == 5 thenprint("Two plus three is five") -- Hai nhân ba là nămelseprint("All conditions failed") -- Không in vì điều kiện trước đó là đúngend
Trong khi Loops
Một while — do lượt đánh giá xem điều kiện đã được quy định có đúng hay sai. Nếu điều kiện đó là false hoặc 1> nil1> thì lượt đánh gi
local timeRemaining = 10while timeRemaining > 0 doprint("Seconds remaining: " .. timeRemaining)task.wait(1)timeRemaining -= 1endprint("Timer reached zero!")--[[ Kết quả ra:Seconds remaining: 10Seconds remaining: 9Seconds remaining: 8Seconds remaining: 7Seconds remaining: 6Seconds remaining: 5Seconds remaining: 4Seconds remaining: 3Seconds remaining: 2Seconds remaining: 1Timer reached zero!]]
Vòng lặp vô tận
Bạn có thể sử dụng một while — do lượt lặp vô tận game lỗi bằng cách đặt true là điều kiện.
while true doprint("Looping...")task.wait(0.5)end--[[ Kết quả ra:Looping...Looping...Looping...Looping......]]
Lặp lại
The repeat — until loop repeats until a condition is true. The conditional test evaluates sau the code block runs, so the code block always runs at least once. unlike other languages, the Luau scope of a local variable declared inside a 1> peat1> — 4> until4> loop includes the condition.
local currentGoblinCount = 18-- Spawn goblin lên đến mức tối đa 25 trong trò chơirepeatspawnGoblin()currentGoblinCount += 1print("Current goblin count: " .. currentGoblinCount)until currentGoblinCount == 25print("Goblins repopulated!")--[[ Kết quả ra:Current goblin count: 19Current goblin count: 20Current goblin count: 21Current goblin count: 22Current goblin count: 23Current goblin count: 24Current goblin count: 25Goblins repopulated!]]
Đối với các lỗ
A for loop executes code a set number of times, either based on a number of items in a collection or the number of mục trong một bộ sưu tập.
Biểu tượng cho lặp
Một for — do lặp xác định số lần thực hiện lặp sử dụng một trả giá. Lặp được xác định với một giá trị khởi đầu, một giá trị cuối cùng và một giá trị tăng trưởng tùy chọn.
Luau đặt mức đếm bằng giá trị khởi đầu, thi hành mã khối trong vòng for , sau đó thêm một tăng trưởng vào trả giáđếm. Nếu tăng trưởng là dương, thì quá trình lặp lại cho đến khi mức đếm là bằng hoặc nhỏ hơn giá trị
Increment bắt đầu mặc định là 1. Nó không cần phải là một số toàn.
for counter = 1, 3 doprint(counter)end--[[ Kết quả ra:123]]for counter = 1, 6, 2 doprint(counter)end--[[ Kết quả ra:135]]for counter = 2, 0, -0.5 doprint(counter)end--[[ Kết quả ra:21.510.50]]
Chung cho các lỗ
Vòng lặp genéric for lặp qua các mục trong một bộ sưu tập thay vì là một chuỗi số. Với genéric for lặp, bạn có thể thi hành mã cho mỗi mục trong bộ sưu tập, và có thể dễ dàng sử dụng mỗi mục trong mã.
Đối với các lượt trùm, hàm cần thiết để lặp lại các loại bộ sưu tập khác nhau. Thư viện toàn cầu ipairs() trả lại một hàm cho các bộ sưu tập, và thư viện toàn cầu pairs() trả lạ
Iteration chung
Ở Luau, bạn có thể lặp lại một bảng bằng cách sử dụng trực tiếp in Keyword trên bảng, thay vì sử dụng chức năng lặp lại như ipairs(): :
for i, v in {1, 2, 3, 4, 5} doprint(i, v)end
Generalized iteration cũng cho phép bạn sử dụng metamethode __iter để tạo một chức năng it器 tùy chỉnh. Ví dụ này itere trên một bảng trong trật tự ngược, từ một thành phần cuối cùng đến một thành phần đầu tiên:
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
--[[ Kết quả ra:
5 5
4 4
3 3
2 2
1 1
]]
Ma trận
Hàm ipairs() trả về một đơn bộ đếm đi qua các chỉ số trong một bảng và trả một đơn index và value cho mỗi yếu tố. Điều này làm cho nó phù hợp cho các bảng, nơi tất cả các chỉ số là số.
local array = {"a", "b", "c", "d", "e"}for index, value in ipairs(array) doprint(index, value)end--[[ Kết quả ra:1 a2 b3 c4 d5 e]]
Từ điển
Hàm pairs() trả về một it器 đi qua tất cả các chỉ số (bao gồm cả các chỉ số số) trong một bảng và trả một key và value cho mỗi hàng trong bảng dictionaries. Cấu trúc trả tiền của các hàng tr
local dictionary = {[1] = "a",["Hello"] = "b",[5] = "c",[true] = "d",["World"] = "f",[false] = "e"}for key, value in pairs(dictionary) doprint(key, value)end--[[ Kết quả ra:Hello btrue dfalse eWorld f5 c1 a]]
Điều khiển từ khóa
Đập lỗi
Để buộc phải kết thúc một lượt lặp, hãy sử dụng các từ khóa break . Các ví dụ mã sau đây cho thấy cách phá vỡ một lượt lặp vô tận while — do lượt lặp.
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!")--[[ Kết quả ra:12345Five seconds elapsed. Time to move on!]]
Lặp lại
Để buộc vào một lần lượt lại và khởi động lại, hãy sử dụng từ khóa continue. Một lần lượt lại for lần lượt lại counter
local function GetChildrenOfClass(parent: Instance, className: string): {Instance}
local children = {}
for _, child in parent:GetChildren() do
if child.ClassName ~= className then continue end -- Lặp lại loop
table.insert(children, child)
end
return children
end