0Pricing
Lua Academy · บทเรียน

โพรโทคอล 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) end

nil ยุติลูป

ลูป 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. โพรโทคอล for แบบทั่วไป
  2. ตัววนซ้ำไร้สถานะ
  3. ตัววนซ้ำมีสถานะด้วยคลอเชอร์
  4. ตัวสร้างลำดับด้วยโคโรทีน
← กลับไปที่ Lua Academy