วิกิพีเดีย:Lua

จากวิกิพีเดีย สารานุกรมเสรี
ข้ามไปที่การนำทาง ข้ามไปที่การค้นหา
โครงสร้างข้อมูลวิกิพีเดีย
เนมสเปซหัวเรื่อง เนมสเปซพูดคุย
0 (หลัก/บทความ) การพูดคุย 1
2 ผู้ใช้ ผู้ใช้พูดคุย 3
4 วิกิพีเดีย วิกิพีเดีย พูดคุย 5
6 ไฟล์ ไฟล์พูดคุย 7
8 มีเดียวิกิ มีเดียวิกิคุย 9
10 แม่แบบ พูดคุยแม่แบบ 11
12 ช่วย ช่วยพูดคุย 13
14 หมวดหมู่ หมวดหมู่พูดคุย 15
100 พอร์ทัล พอร์ทัลพูดคุย 101
118 ร่าง ร่างเสวนา 119
710 ข้อความหมดเวลา TimedText talk 711
828 โมดูล โมดูลพูดคุย 829
เลิกใช้
2300 แกดเจ็ต แก็ดเจ็ตทอล์ค 2301
2302 คำจำกัดความของแกดเจ็ต พูดคุยคำจำกัดความของแกดเจ็ต 2303
-1 พิเศษ
-2 สื่อ

Luaเป็นภาษาการเขียนโปรแกรมที่มีให้บริการผ่านส่วนขยายScribunto MediaWikiในวิกิพีเดียภาษาอังกฤษ ตอนนี้โค้ด Lua สามารถฝังลงในเทมเพลต Wiki โดยใช้ฟังก์ชัน "{{#invoke:}}" ของ Scribunto ส่วนขยายนี้สนับสนุน Lua 5.1 ณ กรกฎาคม 2015

ซอร์สโค้ด Lua ถูกเก็บไว้ในเพจที่เรียกว่า modules (เช่นModule:Example ) โมดูลแต่ละโมดูลเหล่านี้จะถูกเรียกใช้ (โดยรหัส{{#invoke:<Module name>|<Function name>|(optional) param1 | param2...}}) ตัวอย่าง:

Wikitext ผลลัพธ์
{{#invoke:Example|hello}} สวัสดีชาวโลก!

เรียกใช้โมดูล

โมดูลทำงานบนหน้าวิกิปกติโดยใช้ฟังก์ชัน #invoke parser ไวยากรณ์ของ #invoke คล้ายกับไวยากรณ์ของเทมเพลต แต่มีความแตกต่างบางประการ แตกต่างที่สำคัญที่สุดคือการที่คุณจะต้องระบุชื่อฟังก์ชัน ฟังก์ชันคือชุดคำสั่งที่รับค่าอินพุต ประมวลผล และส่งกลับค่าเอาต์พุต [1]เหมือนกับที่เทมเพลตทำ: คุณให้อาร์กิวเมนต์ ประมวลผล และได้ผลลัพธ์ อย่างไรก็ตาม คุณสามารถกำหนดฟังก์ชันได้มากมายในโมดูล Lua เดียว ในขณะที่คุณสามารถกำหนดเทมเพลตได้เพียงเทมเพลตเดียวในหน้าเดียว

นอกจากนี้ คุณไม่สามารถเรียกใช้โมดูล Lua ได้โดยตรง – คุณสามารถเรียกใช้ฟังก์ชันใดฟังก์ชันหนึ่งของโมดูลเท่านั้น โมดูลเป็นเพียงคอนเทนเนอร์สำหรับฟังก์ชัน และไม่ได้ทำอะไรด้วยตัวเอง มีเหตุผลสองประการที่เราจำเป็นต้องป้อนชื่อฟังก์ชัน: เราไม่สามารถเรียกใช้โมดูลได้ด้วยตัวเอง และหากไม่ได้ระบุชื่อฟังก์ชัน Lua จะไม่ทราบว่าเราต้องการเรียกใช้ฟังก์ชันใด

วิธีที่ง่ายที่สุดในการเรียกใช้โมดูลจากหน้าวิกิมีดังนี้:

{{#invoke: ชื่อโมดูล | ชื่อฟังก์ชัน }}

ตัวอย่างเช่น เราสามารถเรียกใช้Module:Exampleด้วยวิธีนี้ ซึ่งมีฟังก์ชันชื่อ "hello"

  • {{#invoke:Example|hello}} → สวัสดีชาวโลก!

การใช้อาร์กิวเมนต์

อาร์กิวเมนต์ถูกส่งไปยังโมดูลในลักษณะเดียวกับที่ส่งผ่านไปยังเทมเพลต อย่างไรก็ตาม โปรดทราบว่าข้อความหลังอักขระไปป์ตัวแรกจะเป็นชื่อฟังก์ชันเสมอ อาร์กิวเมนต์ตำแหน่งแรกคือข้อความหลังไพพ์ ที่สอง

{{#invoke: ชื่อโมดูล | ชื่อฟังก์ชัน | อาร์กิวเมนต์ตำแหน่งแรก | อาร์กิวเมนต์ตำแหน่งที่สอง | ชื่ออาร์กิวเมนต์ = ค่า }}

ในโมดูล: ตัวอย่างฟังก์ชัน "hello_to" จะทักทายผู้คนที่แตกต่างกันโดยขึ้นอยู่กับอาร์กิวเมนต์ตำแหน่งแรก มันทำงานเช่นนี้:

  • {{#invoke:Example|hello_to|Kate}} → สวัสดีเคท!
  • {{#invoke:Example|hello_to|Fred}} → สวัสดีเฟร็ด!

ฟังก์ชันที่สามในModule:Exampleชื่อมี "count_fruit" ใช้อาร์กิวเมนต์ที่มีชื่อbananasและapplesเพื่อนับจำนวนกล้วยและแอปเปิ้ลที่เรามี สามารถรันได้ดังนี้:

  • {{#invoke:Example|count_fruit|apples=3|bananas=4}} → ฉันมีกล้วย 4 ลูกและแอปเปิ้ล 3 ลูก
  • {{#invoke:Example|count_fruit|bananas=5|apples=2}} → ฉันมีกล้วย 5 ลูก แอปเปิ้ล 2 ลูก

โมดูลส่วนใหญ่มีหน้าเอกสารที่อธิบายว่าอาร์กิวเมนต์ใดที่สามารถใช้ได้และผลกระทบจะเป็นอย่างไร

ขอสคริปต์

ไปที่Wikipedia talk:Luaเพื่อขอความช่วยเหลือในการเขียนสคริปต์ Lua เพื่อทำงานเฉพาะบน Wikipedia หรือโครงการอื่นของมูลนิธิ Wikimedia

ประวัติศาสตร์

ประวัติแย่ๆ. {{ qif }}, ParserFunctions , ส่วนขยาย Lua , ภาษาสคริปต์ wiki ที่ถกเถียงกัน (JavaScript v. Lua), mw:Extension:WikiScripts , Tim เขียนScribuntoพร้อมการสนับสนุนเบื้องต้นสำหรับ Lua

คุยกันมาหลายปีแล้ว Lua ได้รับการติดตั้งในปี 2555 เพื่อทดสอบบนtest2.wikipedia.orgโดยเชิญชวนให้บรรณาธิการทุกคนทดลองใช้โมดูล Lua ที่กำลังพัฒนา Lua ได้รับการติดตั้งบนวิกิพีเดียภาษาอังกฤษในเดือนกุมภาพันธ์ 2013 หลังจากทดสอบบน mediawiki.org และ Wikimedia ทดสอบวิกิ

เกี่ยวกับ Lua

ดูการนำเสนอสั้นๆ ของ Brad Jorsch สำหรับตัวอย่างพื้นฐานของวิธีแปลงเทมเพลตข้อความวิกิเป็นโมดูล Lua

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

ท้องถิ่น p  =  {};      --โมดูล lua ทั้งหมดบนวิกิพีเดียต้องเริ่มต้นด้วยการกำหนดตัวแปร -- 
                    ซึ่งจะเก็บฟังก์ชันที่สามารถเข้าถึงได้จากภายนอก
                    --ตัวแปรดังกล่าวสามารถมีชื่ออะไรก็ได้ที่คุณต้องการ และอาจ
                    มีข้อมูลและฟังก์ชันต่างๆ
พี สวัสดี= ฟังก์ชัน( frame ) -- เพิ่มฟังก์ชันไปที่ "p"   --ฟังก์ชันดังกล่าวสามารถเรียกได้ในวิกิพีเดีย -- ผ่านคำสั่ง #invoke --"frame" จะมีข้อมูลที่ Wikipedia -- ส่งฟังก์ชันนี้เมื่อทำงาน-- 'สวัสดี' เป็นชื่อที่คุณเลือก ต้องอ้างอิงชื่อเดียวกันเมื่อใช้โมดูล         
                                        
                                        
                                        
                                        
                                 
    
    local  str  =  "สวัสดีชาวโลก!"   --ประกาศตัวแปรท้องถิ่นและตั้งค่าเท่ากับ
                                --"สวัสดีชาวโลก!"  
    
    return  str --นี่    บอกเราให้ออกจากฟังก์ชันนี้และส่งข้อมูลใน
                  --"str" ​​กลับไปที่ Wikipedia
    
ท้าย  - ท้ายของฟังก์ชั่น "สวัสดี" 
ฟังก์ชั่น หน้า hello_to ( เฟรม) - เพิ่มฟังก์ชั่นอื่นท้องถิ่นชื่อ= กรอบ args [ 1 ] -- ในการเข้าถึงอาร์กิวเมนต์ที่ส่งผ่านไปยังโมดูล ให้ใช้ `frame.args` -- `frame.args[1]` หมายถึงพารามิเตอร์ที่ไม่มีชื่อตัวแรก- กำหนดให้โมดูลส่งคืน"สวัสดี " .. ชื่อ.. "!" -- `..` เชื่อมสตริงเข้าด้วยกัน การดำเนินการนี้จะส่งคืนคำทักทายที่กำหนดเองโดยขึ้นอยู่กับชื่อที่ระบุ เช่น "สวัสดี เฟร็ด!" ฟังก์ชั่นสิ้นสุดp .		
	     
							    
							    
	       
									 

 count_fruit ( เฟรม) 
	ท้องถิ่น num_bananas  =  กรอบ args กล้วย- ข้อโต้แย้งที่มีชื่อ ({{#invoke: ตัวอย่าง | count_fruit | foo = บาร์}}) เป็นเช่นเดียวกันท้องถิ่นnum_apples = กรอบ args แอปเปิล-- เข้าถึงได้โดยการจัดทำดัชนี `frame.args` ตามชื่อ (`frame.args["bananas"]` หรือ) เทียบเท่ากับ `frame.args.bananas` ส่งคืน'ฉันมี' .. num_bananas .. ' กล้วยและ ' .. num_apples .. ' apples' - เช่นเดียวกับข้างต้น 
	      
										   
	         
										   
										   -- ประโยคตามอาร์กิวเมนต์ที่กำหนด 
จบ

return  p     - โมดูลทั้งหมดสิ้นสุดโดยส่งคืนตัวแปรที่มีฟังก์ชันไปยัง Wikipedia 
-- ตอนนี้เราสามารถใช้โมดูลนี้ได้โดยเรียก {{#invoke: Example | สวัสดี }}, 
-- {{#invoke: Example | สวัสดี_to | foo }} หรือ {{#invoke:Example|count_fruit|bananas=5|apples=6}} 
-- โปรดทราบว่าส่วนแรกของการเรียกใช้คือชื่อหน้าวิกิของโมดูล
-- และส่วนที่สองคือชื่อ ของฟังก์ชันใดฟังก์ชันหนึ่งที่แนบมากับ
ตัวแปร -- ที่คุณส่งคืน

-- ไม่อนุญาตให้ใช้ฟังก์ชัน "พิมพ์" ในวิกิพีเดีย เอาต์พุตทั้งหมดสำเร็จ
- ผ่านสตริง "ส่งคืน" ไปยัง Wikipedia

ตัวอย่างของ Lua ถูกเน้นโดยแท็ก "<syntaxhighlight lang="lua">...</syntaxhighlight>" ที่วางไว้รอบซอร์สโค้ด Lua หากต้องการดูตัวอย่างที่ซับซ้อนมากขึ้นของ Lua โปรดดูบทความ: " Lua (ภาษาโปรแกรม) "

สำหรับคำแนะนำเกี่ยวกับวิธีการใช้ Lua ภายในมีเดียวิกิ (และด้วยเหตุนี้วิกิพีเดีย) ดูmw: ส่วนขยาย: Scribunto / Lua คู่มืออ้างอิง

การทดสอบหน่วย

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

โดยการประชุมการทดสอบหน่วยสำหรับโมดูลเช่นโมดูล: ตัวอย่างจะอยู่ในโมดูล: ตัวอย่าง / testcasesและมีการดำเนินการในโมดูลพูดคุย: ตัวอย่าง / testcases

Module:ScribuntoUnitและModule:UnitTestsเป็นเฟรมเวิร์กการทดสอบที่ใช้กันมากกว่า หมวดหมู่:โมดูลสำหรับเครื่องมือทดสอบยังมีส่วนอื่นๆ ให้ตรวจสอบซึ่งอาจน่าสนใจ

คุณลักษณะเฉพาะของวิกิพีเดีย

โดยรวม: Lua สามารถรับอินพุตได้เฉพาะเมื่อมีสตริงข้อความที่ส่งผ่านไปยัง{{#invoke:}}mw.title.new(...):getContent() และ frame:expandTemplate() เอาต์พุต Lua จะไม่ถูกประมวลผลล่วงหน้าเว้นแต่มีการเรียก frame:preprocess() อย่างชัดเจน หมายความว่าการเรียกเทมเพลต ฟังก์ชัน parser ฯลฯ ในเอาต์พุตจะทำงานไม่ถูกต้อง นอกจากนี้ Lua ทั้งหมดในหน้านั้นจำกัดเวลา CPU ไว้ที่ 10 วินาที (คุณสามารถดูในซอร์สโค้ดของหน้าที่แสดงผลเพื่อดูว่าเทมเพลตหรือโมดูลใช้เวลาในการแยกวิเคราะห์นานแค่ไหน) และเมื่อเทียบกับ Lua มาตรฐาน Lua ของ Scribunto ไม่มีฟังก์ชันทุกประเภท (ดูmw:Extension:Scribunto/Lua คู่มืออ้างอิง § ความแตกต่างจากมาตรฐาน Lua )

ข้อจำกัดในการป้อนข้อมูล Lua

รหัส Lua ใน Scribunto จะทำงานเมื่อมีการแยกวิเคราะห์หน้าเท่านั้น ดังนั้น ข้อมูลป้อนเดียวของผู้ใช้ที่ Lua สามารถรับได้คือการแก้ไขหน้า - ไม่สามารถสร้างกล่องที่คำนวณรากที่สองของตัวเลขที่คุณพิมพ์ หรือคำนวณชิ้นส่วนของชุด Mandelbrot ใหม่ขึ้นอยู่กับว่าส่วนใดของชุดหลักที่คุณคลิก บน. อินพุต Lua สามารถรับได้รวมถึงหน้าข้อความที่สามารถถอดเปลี่ยนได้บน Wikipedia นี้ไม่ได้รวมถึงไฟล์กราฟิก (ไม่ได้.svgไฟล์แม้ว่าพวกเขาจะเป็นจริงข้อความเว้นแต่คุณจะตัดและวางมันลงบนหน้าข้อความที่วิกิพีเดีย) รายการหน้าเว็บระบุไว้ในส่วนหมวดหมู่หรือเนื้อหาของไม่ใช่ transcludeable หน้าพิเศษ .

Wikitext

ส่วนหัว Wikipedia ที่มีการถอดเสียงมักมีรหัสที่ซ่อนอยู่ เช่น "UNIQ5ae8f2aa414ff233-h-3--QINU" ซึ่งอาจจำเป็นต้องถอดออกเพื่อให้แยกวิเคราะห์ได้อย่างมีประสิทธิภาพ

Wikilinks ที่ใช้เคล็ดลับ Pipe [[Wikipedia:Help| ]]จะไม่ทำงานหากส่งคืนเป็นเอาต์พุต - จะต้องเขียนอย่างชัดเจนว่า[[Wikipedia:Help|Help]]. การแปลงแบบบันทึกล่วงหน้าอื่นๆ เช่น การแทนที่~~~~ด้วยลายเซ็น จะไม่สามารถดำเนินการได้ การคัดลอกเทมเพลต การเรียกใช้ฟังก์ชัน parser และการแทนที่ตัวแปร (เช่น สิ่งใดที่มี a {{...}}) จะไม่ถูกประมวลผล และแท็กต่างๆ เช่น<ref>หรือ<nowiki>.

การติดฉลากแม่แบบที่แปลงแล้ว

โปรดวางเทมเพลต{{ lua }} ในหน้าย่อยเอกสารของเทมเพลตทั้งหมดที่ใช้ Lua จะช่วยให้สื่อสารการใช้งาน Lua และการแปลงเทมเพลตได้ดีขึ้น

ดูสิ่งนี้ด้วย

หมายเหตุ

  1. ^ คุณยังสามารถมีค่าเอาต์พุตได้หลายค่า แต่ฟังก์ชันที่ทำสิ่งนี้ไม่ได้มีไว้สำหรับการเข้าถึงจากหน้าวิกิตามปกติ