โพรโทคอล for แบบทั่วไป
ทำความเข้าใจโพรโทคอลตัววนซ้ำสามค่า ได้แก่ ฟังก์ชันตัววนซ้ำ สถานะ และตัวแปรควบคุม
โพรโทคอล for แบบทั่วไป เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
การทำงานของ for แบบทั่วไป
คำสั่ง for จะเรียกฟังก์ชันตัววนซ้ำในการวนแต่ละรอบ โดยส่งสถานะและตัวแปรควบคุมไปให้ และหยุดเมื่อฟังก์ชันส่งคืน nil
การส่งคืนสามค่า
for var in iter, state, init do — Lua จะแยกสิ่งนี้เป็น ฟังก์ชันตัววนซ้ำ iter สถานะคงที่ state และตัวแปรควบคุมเริ่มต้น init
โพรโทคอล ipairs
ipairs(t) ส่งคืนฟังก์ชันตัววนซ้ำแบบไร้สถานะ ตารางเป็นสถานะ และ 0 เป็นตัวแปรควบคุมเริ่มต้น การเรียกแต่ละครั้งจะส่งคืนดัชนีและค่าถัดไป
for i, v in ipairs({10, 20, 30}) do
print(i, v)
endตัววนซ้ำแบบกำหนดเองที่ส่งคืนสามค่า
สร้างตัววนซ้ำแบบไร้สถานะที่กำหนดเองโดยส่งคืนค่าทั้งสามอย่างอย่างชัดเจน
local function iter(t, i)
i = i + 1
local v = t[i]
if v then return i, v end
end
for i, v in iter, {"a","b","c"}, 0 do
print(i, v)
endทำให้ง่ายขึ้นด้วยคลอเชอร์
ตัววนซ้ำที่ใช้คลอเชอร์จำเป็นต้องส่งคืนเพียงฟังก์ชันตัววนซ้ำเท่านั้น (ไม่ต้องใช้สถานะหรือตัวแปรควบคุม เพราะสิ่งเหล่านี้อยู่ในอัปแวลู)
local function values(t)
local i = 0
return function()
i = i + 1
return t[i]
end
end
for v in values({1,2,3}) do print(v) endnil ยุติลูป
ลูป for แบบทั่วไปจะสิ้นสุดทันทีที่ฟังก์ชันตัววนซ้ำส่งคืน nil เป็นค่าที่ส่งคืนตัวแรก นี่คือข้อตกลงการสิ้นสุด
ค่าที่ส่งคืนหลายค่า
ตัววนซ้ำสามารถส่งคืนหลายค่า โดยแต่ละค่าจะตรงกับตัวแปรลูปหนึ่งตัว เช่น for k, v in pairs(t)
for k, v in pairs({x=1, y=2}) do
print(k, v)
endการใช้พารามิเตอร์สถานะ
พารามิเตอร์สถานะจะถูกส่งต่อไปยังการเรียกตัววนซ้ำทุกครั้งโดยไม่มีการเปลี่ยนแปลง สำหรับตัววนซ้ำแบบไร้สถานะ พารามิเตอร์นี้จะเก็บบริบทที่จำเป็นทั้งหมดไว้ (เช่น ตารางเอง)
Coroutine.wrap ในฐานะตัววนซ้ำ
coroutine.wrap(fn) ส่งคืนฟังก์ชันที่ทำให้โครูทีนทำงานต่อในแต่ละครั้งที่เรียก ค่าที่ส่งด้วย yield จะกลายเป็นค่าที่ส่งคืน จึงเหมาะอย่างยิ่งสำหรับใช้เป็นตัววนซ้ำของ for แบบทั่วไป
local function countdown(n)
return coroutine.wrap(function()
for i = n, 1, -1 do coroutine.yield(i) end
end)
end
for v in countdown(5) do print(v) endการประกอบตัววนซ้ำ
สามารถประกอบตัววนซ้ำได้ โดยห่อตัววนซ้ำหนึ่งไว้ในอีกตัวเพื่อเพิ่มการกรองหรือการแปลงค่า
local function mapped(iter, fn)
return function()
local v = iter()
if v ~= nil then return fn(v) end
end
endตัววนซ้ำไม่สิ้นสุด
ตัววนซ้ำที่ไม่เคยส่งคืน nil จะสร้างลูปไม่สิ้นสุด ควรกำหนดเงื่อนไขการสิ้นสุดหรือใช้ break เสมอ
local function naturals()
local n = 0
return function() n = n+1; return n end
end
for v in naturals() do
if v > 5 then break end
print(v)
endคำถามเกี่ยวกับ for แบบทั่วไป
ลูป for แบบทั่วไปหยุดเมื่อใด
สรุป: โพรโทคอล for แบบทั่วไป
for แบบทั่วไปจะเรียกฟังก์ชันตัววนซ้ำด้วยสถานะคงที่และตัวแปรควบคุม โดยจะหยุดเมื่อได้ nil คลอเชอร์ช่วยทำให้ตัววนซ้ำที่มีสถานะง่ายขึ้นด้วยการเข้ารหัสสถานะไว้ในอัปแวลู
คำถามที่พบบ่อย
บทเรียน “โพรโทคอล for แบบทั่วไป” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “โพรโทคอล for แบบทั่วไป” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “โพรโทคอล for แบบทั่วไป”
ทำความเข้าใจโพรโทคอลตัววนซ้ำสามค่า ได้แก่ ฟังก์ชันตัววนซ้ำ สถานะ และตัวแปรควบคุม คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “โพรโทคอล for แบบทั่วไป” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม
ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- โพรโทคอล for แบบทั่วไป
- ตัววนซ้ำไร้สถานะ
- ตัววนซ้ำมีสถานะด้วยคลอเชอร์
- ตัวสร้างลำดับด้วยโคโรทีน