Latest web development tutorials

Lua iterator

iterator (iterator) เป็นวัตถุที่สามารถนำมาใช้ในการสำรวจส่วนภาชนะแม่แบบไลบรารีมาตรฐานหรือทั้งหมดขององค์ประกอบที่อยู่ของแต่ละวัตถุ iterator หมายถึงภาชนะที่กำหนด

ใน Lua iterator เป็นชนิดของตัวชี้โครงสร้างการสนับสนุนซึ่งสามารถสำรวจองค์ประกอบของคอลเลกชันในแต่ละ


Generics สำหรับ iterator

สำหรับการเก็บรักษายาชื่อสามัญในการทำงานซ้ำภายในของตัวเองในความเป็นจริงมันจะช่วยประหยัดค่าที่สาม: ฟังก์ชั่นซ้ำค่าคงที่ของรัฐตัวแปรในการควบคุม

Generics สำหรับการย้ำให้ชุดของคีย์ / คู่ค่าไวยากรณ์เป็นดังนี้:

for k, v in pairs(t) do
    print(k, v)
end

รหัสข้างต้น, K, v รายการตัวแปรคู่ (T) สำหรับรายชื่อของการแสดงออก

ดูตัวอย่างต่อไปนี้:

array = {"Lua", "Tutorial"}

for key,value in ipairs(array) 
do
   print(key, value)
end

เอาท์พุทเป็นรหัสดังกล่าวข้างต้นจะถูกดำเนินการ:

1  Lua
2  Tutorial

ตัวอย่างข้างต้นเราใช้ฟังก์ชั่น ipairs ซ้ำ Lua ให้โดยค่าเริ่มต้น

ที่นี่เรามองกระบวนการสำหรับการดำเนินการของพัดลม:

  • แรกเริ่มต้นจากการคำนวณมูลค่าหลังการแสดงออกการแสดงออกควรกลับสำหรับช่วงที่ต้องการของสามค่า: ฟังก์ชั่นซ้ำค่าคงที่ของรัฐตัวแปรในการควบคุมและการกำหนดหลายค่าจำนวนผลลัพธ์ถ้าแสดงออกผลตอบแทนน้อยกว่าสาม ที่มีจุดศูนย์อัตโนมัติจะทำขึ้นส่วนที่เกินจะถูกละเลย
  • ประการที่สองค่าคงที่ของรัฐและการควบคุมตัวแปรเป็นพารามิเตอร์ที่จะเรียกใช้ฟังก์ชัน iterator (หมายเหตุ: สำหรับโครงสร้างค่าคงที่ของรัฐที่ไร้ประโยชน์เพียงแค่ได้รับค่าของเขาเมื่อเริ่มต้นและส่งผ่านไปยังฟังก์ชั่นซ้ำ)
  • ประการที่สามฟังก์ชั่นส่งกลับย้ำมูลค่าให้กับรายการตัวแปร
  • ประการที่สี่ถ้าค่าตอบแทนของศูนย์ในปลายแรกของวงมิฉะนั้นร่างกายห่วง
  • ประการที่ห้าการโทรกลับไปที่ฟังก์ชั่นขั้นตอนซ้ำสองอีกครั้ง

. ใน Lua เรามักจะใช้เพื่ออธิบายฟังก์ชั่น iterator เรียกร้องให้ฟังก์ชั่นนี้ในแต่ละองค์ประกอบจะส่งกลับต่อไปของคอลเลกชัน Lua iterator มีดังต่อไปนี้สองประเภท:

  • iterator ไร้สัญชาติ
  • รัฐหลาย iterator

iterator ไร้สัญชาติ

iterator ไร้สัญชาติหมายถึงไม่เก็บ iterators รัฐใด ๆ เพื่อให้เราสามารถใช้ห่วงไร้สัญชาติหลีกเลี่ยงการสร้าง iterator ปิดใช้จ่ายราคาพิเศษ

ย้ำแต่ละฟังก์ชั่นซ้ำสองตัวแปร (รัฐและควบคุมตัวแปรคงที่) ซึ่งเป็นพารามิเตอร์ที่เรียกว่า iterator ไร้สัญชาติโดยใช้เพียงสองค่าเหล่านี้จะได้รับองค์ประกอบถัดไป

ตัวอย่างทั่วไปของเช่น iterator ไร้สัญชาติง่ายๆคือ ipairs เขาผ่านองค์ประกอบของอาร์เรย์แต่ละ

ตัวอย่างต่อไปนี้เราจะใช้ฟังก์ชั่นที่เรียบง่ายเพื่อให้บรรลุ iterator ที่ n ดิจิตอลสแควร์:

function square(iteratorMaxCount,currentNumber)
   if currentNumber<iteratorMaxCount
   then
      currentNumber = currentNumber+1
   return currentNumber, currentNumber*currentNumber
   end
end

for i,n in square,3,0
do
   print(i,n)
end

เอาท์พุทตัวอย่างข้างต้นคือ

1	1
2	4
3	9

รัฐ traversal ซ้ำรวมถึงโต๊ะ (ในระหว่างรอบไม่เปลี่ยนแปลงรัฐอย่างต่อเนื่อง) และดัชนีปัจจุบัน (ตัวแปรในการควบคุม) ipairs และฟังก์ชั่นซ้ำเป็นเรื่องง่ายมากที่เราสามารถประสบความสำเร็จใน Lua:

function iter (a, i)
    i = i + 1
    local v = a[i]
    if v then
       return i, v
    end
end
 
function ipairs (a)
    return iter, a, 0
end

เมื่อ Lua เรียก ipairs (ก) ที่จะเริ่มต้นรอบเขามาสามค่า: การ ITER ซ้ำฟังก์ชั่นสภาพคงที่การควบคุมตัวแปรค่าเริ่มต้นของ 0 แล้ว Lua เรียก ITER (A, 0) ผลตอบแทนที่ 1 [1] (เว้นแต่ [1] = ไม่มี); ซ้ำสองเรียก ITER (มี 1) ผลตอบแทนที่ 2 เป็น [2] ...... จนองค์ประกอบที่ศูนย์แรก


รัฐหลาย iterator

ในหลายกรณีความจำเป็นในการรักษาส่วนใหญ่ของข้อมูลของรัฐ iterator ที่มากกว่าเพียงแค่การระบุค่าคงที่การควบคุมและตัวแปรวิธีที่ง่ายที่สุดคือการใช้การปิดมีวิธีที่จะสรุปข้อมูลของรัฐทั้งหมดลงในตาราง, ตารางเป็นซ้ำ สถานะของค่าคงที่เพราะในกรณีนี้ข้อมูลทั้งหมดจะถูกเก็บไว้ในตารางการทำงานซ้ำจึงมักจะไม่จำเป็นต้องใช้พารามิเตอร์ที่สอง

ตัวอย่างต่อไปนี้เราได้สร้าง iterators ของเราเอง:

array = {"Lua", "Tutorial"}

function elementIterator (collection)
   local index = 0
   local count = #collection
   -- 闭包函数
   return function ()
      index = index + 1
      if index <= count
      then
         --  返回迭代器的当前元素
         return collection[index]
      end
   end
end

for element in elementIterator(array)
do
   print(element)
end

เอาท์พุทตัวอย่างข้างต้นคือ

Lua
Tutorial

ตัวอย่างข้างต้นเราจะเห็นการใช้ฟังก์ชั่นการปิดภายใน elementIterator คำนวณเพื่อให้บรรลุขนาดชุดและการส่งออกของแต่ละองค์ประกอบ