ผลต่างระหว่างรุ่นของ "ภาษาลูอา"

เนื้อหาที่ลบ เนื้อหาที่เพิ่ม
ZilentFyld (คุย | ส่วนร่วม)
ZilentFyld (คุย | ส่วนร่วม)
บรรทัด 94:
</syntaxhighlight>
=== ฟังก์ชัน ===
การที่ลูอาใช้ฟังก์ชันแบบค่า [[first-class function|first-class]] แสดงให้เห็นในตัวอย่าง โดยที่ฟังก์ชัน print ถูกแก้ไข:
<syntaxhighlight lang="lua">
do
local oldprint = print
-- เก็บฟังก์ชั้น print ปัจจุบันเป็น oldprint
function print(s)
--[[ ตั้งฟังก์ชัน print ใหม่. print เดิมยังสามารถใช้งานได้ผ่าน oldprint
อันใหม่มีแค่ argument เดียว]]
oldprint(s == "foo" and "bar" or s)
end
end
</syntaxhighlight>
การเรียกใช้ <code>print</code> ต่อจากนี้จะย้ายไปยังฟังก์ชันใหม่ และเพราะ [[Scope (programming)#Lexical scoping|lexical scoping]] ของลูอา ฟังก์ชัน print เก่าจะสามารถเข้าถึงได้เฉพาะฟังก์ชัน print ใหม่ที่ถูกแก้ไขแล้ว
 
ลูอาสนับสนุน[[ส่วนปิดคลุม (วิทยาการคอมพิวเตอร์)|ส่วนปิดคลุม]] ดังตัวอย่างข้างล่าง:
<syntaxhighlight lang="lua">
function addto(x)
-- ให้ฟังก์ชันใหม่ที่เพิ่ม x ลงใน argument คืน
return function(y)
--[=[ เมื่อเรียกใช้ตัวแปร x ซึ่งอยู่ข้างนอก scope ปัจจุบันและมีอายุน้อยกว่าฟังก์ชันนี้
ลูอาจะสร้างส่วนปิดคลุม]=]
return x + y
end
end
fourplus = addto(4)
print(fourplus(3)) -- แสดงผล 7
 
--นอกจากนั้นยังเรียกใช้ตามนี้ได้:
print(addto(4)(3))
--[[ เพราะว่าเราเรียกฟังก์ชันที่ส่งกลับมาจาก ด้วย argument 4 โดยตรง สิ่งนี้ช่วยลดราคาข้อมูลและประสิทธิภาพจากถูกเรียกซ้ำ ๆ
]]
</syntaxhighlight>
 
ส่วนปิดคลุมสำหรับตัวแปร <code>x</code> สร้างขึ้นทุกครั้งที่ <code>addto</code> ถูกเรียก นั่นทำให้ฟังก์ชันใหม่ที่ถูกคินค่าจะเข้าถึง parameter <code>x</code> ของตัวเองเสมอ ส่วนปิดคลุมควบคุมด้วยที่เก็บขยะของลูอาคล้ายกับวัตถุอื่น ๆ
 
=== ตาราง ===