คุยเรื่องวิกิพีเดีย:ลัวะ

ว.:ลัว (พูดคุย) ช่วย ทำ ทรัพยากร คู่มืออ้างอิง
  • WT:ลัวะ

วิธีสร้างพารามิเตอร์หลายภาษาในModule:Navbox

สวัสดี!

ฉันแปลโมดูล Navbox เป็น Wikipedia ของคาซัค แต่มีปัญหาหนึ่งข้อ เรามี kk:Module:Navbox อยู่แล้ว แต่ฉันต้องการอัปเกรด นอกจากนี้ ในบางเทมเพลต เรายังใช้ Navbox เวอร์ชันภาษาอังกฤษ (พารามิเตอร์ภาษาอังกฤษ) ดังนั้นฉันต้องเพิ่มพารามิเตอร์เวอร์ชันภาษาอังกฤษ (นามแฝง?) ให้กับ new kk:Module:Шолғы อย่างแน่นอนกับ kk:Module:Шолғы/configuration ฉันได้ถามคำถามนี้แล้วในหน้าพูดคุยของ Module:Navbox แต่ไม่มีใครตอบ นั่นเป็นเหตุผลที่ฉันเขียนที่นี่ ขอบคุณ-- Amangeldi Mukhamejan ( พูดคุย ) 15:15, 27 ตุลาคม 2566 (UTC) [ตอบกลับ]

@ Amangeldi Mukhamejan : ฉันเพิ่งเห็นสิ่งนี้ตอนนี้ ขอโทษด้วย ฉันหวังว่ามันจะไม่สายเกินไป
เมื่อไม่นานมานี้ ฉันเขียนโมดูลยูทิลิตี้ที่ช่วยให้คุณสามารถใช้โมดูลใดก็ได้จากภาษาอื่นด้วยชื่อพารามิเตอร์ที่แปลเป็นภาษาท้องถิ่น แนวคิดนี้ง่ายมาก ฉันแน่ใจว่าคุณจะไม่มีปัญหาในการเข้าใจและหาวิธีทำ ดูเขา:ישידה:תרגום ישידה
โดยสรุป: สำหรับแต่ละโมดูลที่คุณต้องการ "แปล" คุณสร้างโมดูล "การแปล" (เมื่อมองย้อนกลับไปฉันเดาว่ามันอาจเป็น JSON แทนที่จะเป็นโมดูล) จากนั้นคุณเรียกโมดูลยูทิลิตี้ โดยส่งผ่านโมดูลเป้าหมาย ฟังก์ชันเป้าหมาย ชื่อของ "โมดูลการแปล" และพารามิเตอร์ใดๆ ที่คุณต้องการส่งผ่านโดยตรง
โมดูลยูทิลิตี้จะโคลนเฟรม (เช่น "พาเรนต์" ของโคลนคือพาเรนต์ที่แท้จริง ไม่ใช่โมดูลยูทิลิตี้) จากนั้นจะเสริม "args" และ args ของพาเรนต์ด้วยพารามิเตอร์ที่แปล จากนั้นจะเรียกโมดูลเป้าหมาย /function ด้วยเฟรมที่ได้รับการตกแต่งนี้
โปรดทราบว่าฉันพูดว่า "เพิ่มคุณค่า" ไม่ใช่ "แทนที่" ซึ่งหมายความว่าผู้โทรสามารถใช้ชื่อพารามิเตอร์ดั้งเดิม _หรือ_ ชื่อที่แปลแล้ว ซึ่งฉันคิดว่าเป็นส่วนหนึ่งของความต้องการของคุณ คุณสามารถผสมและจับคู่ได้ - พารามิเตอร์บางตัวอาจเป็นพารามิเตอร์ที่แปล และพารามิเตอร์อื่นๆ อาจเป็นพารามิเตอร์ดั้งเดิม
มีเอกสารพื้นฐานบางส่วนเป็นความคิดเห็นที่ด้านบนของโมดูล (เอกสารไม่ยาวมาก แต่ก็ยังมี 50% ของทั้งหมด - โค้ดสั้นและไพเราะและค่อนข้างเข้าใจง่าย - ไม่มีเวทย์มนตร์ ฉันเขียนมัน ตามคำขอบางอย่างบน hewiki และทดสอบเพื่อตรวจสอบว่ามันใช้งานได้ แต่ในที่สุดผู้ร้องขอก็ตัดสินใจที่จะไม่ใช้มัน ดังนั้นคุณจึงสามารถพูดได้ว่ามันไม่ได้ "ทดลองและทดสอบแล้ว" แต่ "ทดสอบแล้ว" เท่านั้น...
หลักสูตรนี้ไม่เฉพาะเจาะจงกับ "navbox": เมื่อคุณติดตั้งแล้ว คุณสามารถใช้กับโมดูลใดก็ได้ โดยต้องเสียค่าใช้จ่ายในการสร้าง "โมดูลการแปล" สำหรับแต่ละโมดูลที่นำเข้าที่คุณต้องการใช้กับชื่อพารามิเตอร์ภาษาพื้นเมือง
หากคุณตัดสินใจที่จะใช้มัน ฉันจะขอบคุณมากหากคุณสามารถแจ้งให้เราทราบ และแน่นอน หากคุณพบข้อบกพร่องก็แจ้งให้เราทราบด้วย
ความสงบ. קיפודש (aka kipod) ( พูดคุย ) 04:24, 26 มกราคม 2024 (UTC) [ตอบกลับ]

คำถามเกี่ยวกับนิพจน์ทั่วไป

ฉันใช้:gmatch('{{{([^|]+)')เพื่อค้นหาพารามิเตอร์ที่ถูกต้องในโค้ดของเทมเพลต มันทำงานไม่ถูกต้องนัก

ตัวอย่างเช่นโค้ดมี{{{event}}} {{{event-type|edit-a-thon}}}แต่ดูเหมือนว่าจะตรงกันevent}}} {{{event-typeแต่ไม่ใช่event-typeสิ่งที่ฉันต้องการ — Martin ( MSGJ  ·  พูดคุย ) 13:00 น. 11 มกราคม 2567 (UTC) [ตอบกลับ]

[^|]+จะไปไกลที่สุดเท่าที่จะทำได้เพื่อจับข้อความก่อนที่จะวิ่งเข้าไปในไปป์ ซึ่งเป็นเหตุผลว่าทำไมการจับภาพครั้งแรกจึงยาวมากและมีข้อความจากทั้งเหตุการณ์และประเภทเหตุการณ์ gmatch จากนั้นดำเนินการต่อจากไปป์ที่ถูกหยุดในครั้งสุดท้าย ดังนั้นจะไม่เลือกประเภทเหตุการณ์เนื่องจากมันอยู่เลยจุดนี้ ฉันขอแนะนำให้เพิ่ม}เข้าไปในรายการที่ถูกปฏิเสธนั้น ซึ่งควรป้องกันไม่ให้มีการบันทึกเหตุการณ์มากเกินไป (และดังนั้นจึงเลือกประเภทเหตุการณ์ในภายหลังด้วย) Aidan9382 ( พูดคุย ) 13:31, 11 มกราคม 2567 (UTC) [ตอบกลับ]
ฉันเดาที่นี่ แต่ลอง "-" แทน "+" ในการจับภาพ คุณยังสามารถลอง Escape อักขระที่อาจมีความหมายอื่นได้ (เช่น{ และ | ซึ่งจะต้องมีการ Escape ใน regex ที่เหมาะสม) —  Jts1882  |  พูดคุย 13:36 น. 11 มกราคม 2567 (UTC) [ตอบ]  
ด้วยเหตุผลบางอย่าง ฉันไม่ได้รับข้อความเตือนการแก้ไขและพลาดการตอบกลับด้านบน —  Jts1882  |  พูดคุย 13:38, 11 มกราคม 2567 (UTC) [ตอบกลับ]  
เห็นได้ชัดว่า - เป็นนามแฝงสำหรับ * . นั่นจะไม่ช่วยที่นี่ — Martin ( MSGJ  ·  พูดคุย ) 14:06, 11 มกราคม 2567 (UTC) [ตอบกลับ]
สมบูรณ์แบบ ขอบคุณ! — Martin ( MSGJ  ·  พูดคุย ) 14:03, 11 มกราคม 2567 (UTC) [ตอบกลับ]
อีกทางเลือกหนึ่งอาจเป็นgmatchพารามิเตอร์ทั้งหมดแล้วแยกวิเคราะห์นั้น ในคอนโซลดีบักฉันได้รับผลลัพธ์เหล่านี้โดยใช้string.match()แทนstring.gmatch():
=string.match ('{{{event}}} {{{event-type|edit-a-thon}}}', '{{{([^}]+)}}}')event– นี่จะเป็นstring.match()ผลลัพธ์ แรก
=string.match ('{{{event-type|edit-a-thon}}}', '{{{([^}]+)}}}')event-type|edit-a-thon– และนี่จะเป็นstring.match()ผลลัพธ์ ที่สอง
—Trappist the Monk ( พูดคุย ) 14:39 น. 11 มกราคม 2567 (UTC) [ตอบกลับ]
โปรดทราบว่าค่าเริ่มต้นของพารามิเตอร์มักจะมีเครื่องหมายปีกกาในพารามิเตอร์ที่ซ้อนกัน คำวิเศษ หรือการเรียกเทมเพลต เช่น {{{display_text|{{{title}}}}}} หรือ {{{page_name|{{PAGENAME}}}} ในเทมเพลตที่ชาญฉลาดบางเทมเพลต พวกมันยังครอบตัดชื่อพารามิเตอร์ด้วยCertes ( พูดคุย ) 14:50 น. 11 มกราคม 2567 (UTC) [ตอบกลับ]

ตัวละครหลบหนี

ฉันมีสตริงที่มีอักขระ "#" เมื่อฉันใช้สตริง มันจะสร้างรายการลำดับเลข แต่ฉันแค่ต้องการใช้เป็นสตริง ฉันพยายามmw.text.nowikiแล้วไม่สำเร็จ ฉันได้ลองใช้แล้ว\u0023แต่มันเพิ่งแปลงกลับเป็น # มีข้อเสนอแนะอื่นๆ อีกไหม? — Martin ( MSGJ  ·  พูดคุย ) 12:01 น. 9 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]

คุณสามารถดูปัญหานี้ได้ที่ด้านบนของCategory:WikiProject Women in Red meetup 2017 ควรจะผลิตCategory:WikiProject Women ในชุดสีแดง #1day1woman Articlesแต่ลิงก์นั้นใช้ไม่ได้ด้วยซ้ำ ดังนั้นบางทีเป็นไปไม่ได้ที่จะมี "#" ในชื่อเพจใช่หรือไม่ — Martin ( MSGJ  ·  พูดคุย ) 12:01 น. 9 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]
สำหรับฉันดูเหมือนว่าปัญหาไม่ได้อยู่ที่#ว่าไม่ได้หลบหนี แต่มีการแทรกตัวแบ่งบรรทัดก่อนหน้าในจุดที่ไม่ควรอยู่Nardog ( พูดคุย ) 12:09, 9 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]
ดูเหมือนว่าฉันต้องลบอักขระนั้นออกเพราะชื่อหมวดหมู่ไม่ถูกต้องอยู่แล้ว — Martin ( MSGJ  ·  พูดคุย ) 12:12, 9 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]
โอ้ มันเป็นแฮชแท็ก ไม่ใช่ลิงก์ส่วน ใช่แล้ว มันเป็นไปไม่ได้Nardog ( พูดคุย ) 12:16, 9 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]
ชื่อเพจไม่สามารถมี # ได้ เนื่องจากข้อจำกัดของ MediaWiki ที่บันทึกไว้ในWikipedia:ชื่อเพจ#ข้อจำกัดและข้อจำกัดทางเทคนิค # สงวนไว้สำหรับการแบ่งชื่อหน้าจากจุดยึดต่อไปนี้ (โดยทั่วไปจะเป็นส่วนหัวของส่วน) เช่น Wikipedia talk:Lua#Escape character Certes ( พูดคุย ) 22:13, 9 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]

ดังที่ Nardog ชี้ให้เห็นข้างต้น ดูเหมือนว่าโมดูล Lua จะส่งคืนสตริงที่ขึ้นต้นด้วย "#" ในลักษณะที่ไม่คาดคิด เปรียบเทียบด้านล่าง โมดูลแซนด์บ็อกซ์ของฉันเพิ่งส่งคืนสตริง '#1day1woman' และคุณจะเห็นว่ามันทำงานแตกต่างออกไป — Martin ( MSGJ  ·  talk ) 10:38, 10 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]

  • a#1day1womanb - อย่าหยุดบรรทัด
  • aAlphabet0b - ใช้งานได้แล้ว
นี่อาจเป็นปัญหาเดียวกับที่พบในTemplate talk:R § Space ก่อนโคลอนในป๊อปอัปโดยที่ # ได้รับการตีความว่าเป็นการกำหนดรายการเนื่องจากเป็นจุดเริ่มต้นของสตริงที่ส่งคืนโดยโมดูล คุณสามารถใช้ mw.text.nowiki หรือเข้ารหัสด้วยตนเอง ขึ้นอยู่กับสถานการณ์ของคุณเพื่อให้แสดงได้ตามปกติAidan9382 ( พูดคุย ) 11:46, 10 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]
ขอบคุณ Aidan ใช่มันได้ผลตามที่คาดไว้ — Martin ( MSGJ  ·  พูดคุย ) 14:24, 10 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]

ต้องการความช่วยเหลือเกี่ยวกับ Edge Case ในโมดูล Lua ของฉัน

ฉัน ต้องการย้ายเทมเพลตต่อไปนี้ไปยังวิกิพีเดียภาษาแอฟริกัน: เทมเพลต:Millenniumbox , เทมเพลต:Centurybox , เทมเพลต:Decadebox

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

เทมเพลต การย้าย:Millenniumboxและเทมเพลต:Centuryboxไปยังวิกิพีเดียภาษาแอฟริกาโดยใช้โมดูล Lua นั้นง่ายพอสำหรับฉัน และฉันพอใจกับผลลัพธ์ที่ได้

อย่างไรก็ตาม ฉันติดอยู่กับการย้ายTemplate: Decadebox เทมเพลตนี้มี Edge Case 2 อันที่ไม่มีอยู่ใน Millenniumbox หรือ Centurybox ไม่มีสหัสวรรษที่ 0 หรือศตวรรษที่ 0 อย่างไรก็ตาม มีทศวรรษที่ 0 และทศวรรษที่ 0 ก่อนคริสต์ศักราช ดู0sและ0s BC

ฉันตระหนักถึงกรณี Edge เหล่านี้เมื่อฉันเขียน Lua Module แต่ผลลัพธ์ยังคงไม่ทำงานอย่างที่ฉันคาดหวัง

นี่คือเทมเพลตที่ย้ายของฉัน af:Sjabloon:Dekadeboks และนี่คือโมดูล Lua ที่ใช้: af:Module:Dekadeboks ในเอกสารประกอบหน้าเทมเพลต คุณสามารถดู "กรณีทดสอบ" ที่แตกต่างกันของฉัน ตัวอย่างทั้งหมดทำงานได้ตามที่คาดไว้ ยกเว้น 2 กรณีขอบของฉัน

ดูเหมือนว่าปัญหาจะเกิดจากการที่ Lua ไม่ได้พิมพ์แบบคงที่

ฉันกำลังผ่านทศวรรษที่เลือกมาเป็นข้อโต้แย้ง สำหรับ0sค่าอาร์กิวเมนต์คือ "0" และสำหรับ0s BCคือ "-1"

การคำนวณส่วนใหญ่ของฉันอ่านอาร์กิวเมนต์ของฟังก์ชันเป็นตัวเลข แต่สำหรับกรณีขอบนี้ ฉันอ่านเป็นสตริงแทน เพื่อที่ฉันจะได้จัดการ "-0" เป็นอาร์กิวเมนต์ได้

ฉันรู้ว่ามันค่อนข้างแฮ็ก แต่ฉันไม่สามารถคิดวิธีที่ดีกว่านี้ได้ นอกจากนี้ เมื่อฉันเรียกใช้ฟังก์ชันใน IDE ภายนอก หรือส่งต่อไปยังล่าม Lua ในพื้นที่ ฟังก์ชันจะทำงานตามที่ฉันคาดหวัง

สำหรับตัวอย่างที่ง่ายที่สุด โปรดดูฟังก์ชันของฉันเพื่อรับหมวดหมู่สำหรับปีเกิด: "kry_geboortes_kat_str" ซึ่งอยู่ที่ส่วนท้ายสุดของโมดูล ดูฟังก์ชั่นของฉันเพื่อรับหมวดหมู่การเสียชีวิต: "kry_sterf_kat_str" ซึ่งเป็นแนวทางที่แตกต่างออกไปเล็กน้อย แต่ก็ไม่ได้ผลเช่นกัน

ใครช่วยแนะนำหน่อยได้ไหมว่าฉันจะทำให้ฟังก์ชันเหล่านี้จัดการ "0" และ "-0" เป็นอาร์กิวเมนต์ได้อย่างถูกต้องได้อย่างไร ฉันพลาดอะไรไปที่นี่หรือเปล่า?

ฉันขอขอบคุณข้อเสนอแนะ / คำแนะนำเกี่ยวกับปัญหานี้อย่างมาก - Rooiratel ( พูดคุย ) 09:43, 13 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]

ฉันคิดว่า 0 ควรเป็นทศวรรษแรก นั่นจะแก้ไขแฮ็ค "-0" — Martin ( MSGJ  ·  พูดคุย ) 10:41, 13 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]
นั่นเป็นแนวคิด และมันก็สมเหตุสมผลที่เลข 0ในทางเทคนิคแล้วคือคริสต์ทศวรรษที่ 1 แต่ถ้าผมใช้วิธีนี้ ผมจะต้องเขียนโมดูลทั้งหมดใหม่ทั้งหมด ฉันยังคิดว่ามันจะทำให้ผู้ใช้สับสนมากขึ้น เทมเพลต enwiki ยังใช้ 0 เป็นอาร์กิวเมนต์สำหรับเพจใน0sแต่ฉันจะถือว่าวิธีนี้เป็นทางเลือกสุดท้ายอย่างแน่นอน แต่ฉันไม่ได้สังเกตเห็นจริงๆ ว่าฉันกำลังทำเทมเพลตนี้แตกต่างจากเทมเพลตอื่นๆ ดังนั้นฉันจะอัปเดตเอกสารให้ระบุอย่างชัดเจนว่าอาร์กิวเมนต์คาดหวังอะไร และสิ่งที่พวกเขานำเสนอ (ไม่ว่าฉันจะเลือกใช้วิธีแก้ปัญหาแบบใด) - Rooiratel ( พูดคุย ) 07:29, 14 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]
จะดีกว่าถ้าคุณให้ตัวอย่างที่ชัดเจนสองสามตัวอย่างและบอกว่าอินพุตคืออะไร ผลลัพธ์คืออะไร และอะไรคือสิ่งที่ต้องการ ฉันไม่ชัดเจนว่ากรณีทดสอบแสดงอะไร ดังนั้นโปรดสะกดให้ชัดเจน ฉันไม่ต้องการใช้เวลามากเกินไปในขณะนี้ ดังนั้นฉันจะพูดถึงบางประเด็นเท่านั้น คุณรู้ไหมว่า -0 เท่ากับศูนย์และไม่เป็นลบ ที่บรรทัด 230 num จะเป็น -0 ถ้า args[1] คือ '-0' คุณสามารถใช้ tostring กับศูนย์ลบและอักขระตัวแรกจะเป็นเส้นประหากตัวเลขเป็น -0 (ฉันเห็นว่าบรรทัด 238 ครอบคลุมสิ่งนั้น) สมมติว่าคุณกำลังใช้เฟรมปกติและไม่ใช่สิ่งที่สร้างขึ้นโดยไม่ตั้งใจ frame.args[1] สามารถเป็นสตริงได้เท่านั้น (หรือไม่มีหากไม่มี args[1]) แต่อาร์กิวเมนต์ใด ๆ ที่มีอยู่สามารถเป็นได้เพียงสตริงเท่านั้น ดังนั้นการสตริงที่บรรทัด 229 จะไม่ช่วยอะไร ฉันจะออกไปหลายชั่วโมง แต่จะตรวจสอบอีกครั้งหากปัญหายังไม่ได้รับการแก้ไขJohnuniq ( พูดคุย ) 10:52, 13 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]
> จะดีกว่าถ้าคุณให้ตัวอย่างที่ชัดเจนสองสามตัวอย่างและบอกว่าอินพุตคืออะไร ผลลัพธ์คืออะไร และอะไรที่ต้องการ
ขออภัย ฉันคิดว่าหน้าเอกสารเทมเพลตเพียงพอที่จะให้ตัวอย่างอินพุตและเอาต์พุต ฉันตระหนักดีว่ายังไม่ชัดเจนว่าผลลัพธ์ที่คาดหวังควรเป็นอย่างไร
> คุณรู้ไหมว่า -0 เท่ากับศูนย์และไม่เป็นลบ?
ใช่ ซึ่งเป็นสาเหตุที่ฉันพยายามใช้เมธอด tostring() เพื่อจัดการมันเป็นสตริงแทนที่จะเป็นตัวเลข ฉันใช้ตัวแปร "dek" สำหรับการแสดงสตริงและ "num" สำหรับการแทนตัวเลข
> แต่อาร์กิวเมนต์ใดๆ ที่มีอยู่ต้องเป็นสตริงได้เท่านั้น ดังนั้นการสตริงที่บรรทัด 229 จะไม่ช่วยอะไร
ฉันคิดมาก แต่ในกรณีนี้มันคือ "การแปลง" สตริงเป็นสตริง ดังนั้นมันควรจะยังคงทำงานได้ตามที่ฉันคาดหวัง
ปัญหาหลักของฉันในขณะนี้ไม่ใช่เอาต์พุตเฉพาะ แต่ฉันกำลังพยายามเข้าถึงบล็อกแบบมีเงื่อนไขเมื่อตัวแปร dek เท่ากับ "0" หรือ "-0" แต่ดูเหมือนว่าฟังก์ชันจะไม่ไปถึงเลย
โดยพื้นฐานแล้วฉันต้องการคือ:ฟังก์ชันที่รับอาร์กิวเมนต์เดียวซึ่งเก็บไว้ในตัวแปรตัวหนึ่งเป็นสตริงและอีกตัวแปรหนึ่งเป็นตัวเลข
หากตัวแปรตัวเลขมากกว่า 0 ให้ดำเนินการบล็อกโค้ด
หากตัวแปรตัวเลขน้อยกว่า 0 ให้ดำเนินการบล็อกโค้ด
มิฉะนั้นหากตัวแปรสตริงเท่ากับ "0" ให้ดำเนินการบล็อกโค้ด
มิฉะนั้นหากตัวแปรสตริงเท่ากับ "-0" ให้ดำเนินการบล็อกโค้ด
ฉันไม่สามารถรับเงื่อนไข 2 ข้อสุดท้ายเหล่านี้เพื่อดำเนินการได้
ฉันได้เพิ่มฟังก์ชันการทดสอบที่เรียบง่ายซึ่งเพิ่งส่งคืนสตริงที่บอกว่าถึงบล็อกแบบมีเงื่อนไขใด หากคุณสามารถช่วยได้ฉันจะขอบคุณมาก ในหน้าเทมเพลตของฉันที่ด้านล่างสุด คุณจะเห็นผลลัพธ์ สำหรับ 2 กรณีสุดท้ายของฉันที่อยู่เหนือบล็อกโค้ดเหล่านั้นไม่เคยดำเนินการเลย - Rooiratel ( พูดคุย ) 07:48, 14 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]
@ Rooiratel :ปัญหาคือ af:Template:Dekadeboks#Test Function ใช้เพื่อแสดง "Reached else block" สำหรับสองกรณีล่าสุด ในกรณีสุดท้าย พารามิเตอร์คือ "-0*" โดยที่ฉันเขียนเครื่องหมายดอกจันโดยที่จริงๆ แล้วมีช่องว่าง มันเป็นพารามิเตอร์ที่ไม่มีหมายเลข ดังนั้น MediaWiki จึงไม่ตัดช่องว่างนำหน้า/ต่อท้าย คุณต้องมีโค้ดเพื่อลบช่องว่างที่ฉันทำในการแก้ไขที่ af:Module:Dekadeboks Johnuniq ( พูดคุย ) 09:00 น. 14 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]
ขอบคุณมาก @ Johnuniq ! ฉันรู้ว่ามันต้องเป็นสิ่งที่โง่เขลาเช่นนั้น อย่างน้อยตอนนี้ฉันจะไม่มีวันลืมตัดช่องว่างออกจากข้อโต้แย้ง ฉันสามารถใช้การแก้ไขแบบเดียวกันกับฟังก์ชันที่เหลือได้ และควรแก้ไขปัญหาที่ค้างอยู่ทั้งหมดที่ฉันมีในโมดูลนี้ - Rooiratel ( พูดคุย ) 09:22, 14 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]

ตัวแยกวิเคราะห์เทมเพลตใหม่

สวัสดี - ฉันทำงานบน Wiktionary เป็นส่วนใหญ่ แต่สงสัยว่ามีใครเคยใช้ตัวแยกวิเคราะห์เทมเพลตการย้อนรอยแบบเรียกซ้ำอันทรงพลังซึ่งฉันได้รวบรวมไว้หรือไม่ ซึ่งออกแบบมาเพื่อดึงข้อมูลเทมเพลตจำนวนมากจากหน้าต่างๆ อย่างรวดเร็ว: wikt:Module:template ตัวแยกวิเคราะห์ มัน (หลวมมาก) ขึ้นอยู่กับ mwparserfromhell และสร้างแผนผังโหนดของออบเจ็กต์บนเพจที่สามารถสำรวจเพื่อดึงข้อมูลได้ ฟังก์ชั่นที่มีอยู่สองฟังก์ชั่นนั้นอธิบายไว้ในโมดูล แต่โดยย่อparseTemplateคือฟังก์ชั่นที่คุณป้อนเทมเพลต rawstring เข้าไป และมันจะส่งคืนชื่อเทมเพลตและอาร์กิวเมนต์ ในขณะที่findTemplatesเป็นตัววนซ้ำที่ส่งคืนข้อมูลเกี่ยวกับแต่ละเทมเพลตที่พบใน ข้อความอินพุต คุณสมบัติบางอย่าง:

  • สามารถจัดการการซ้อนเทมเพลต ( {{ }}), อาร์กิวเมนต์ ( {{{ }}}), ส่วนหัว, วิกิลิงก์, ความคิดเห็น HTML, แท็กตัวแยกวิเคราะห์ และรวมแท็กต่างๆ ได้ตามใจชอบ และได้รับการออกแบบมาให้แม่นยำกับตัวแยกวิเคราะห์ PHP ดั้งเดิมมากที่สุดเท่าที่จะเป็นไปได้ ซึ่งรวมถึงการจำลองข้อบกพร่องบางอย่างในตัวแยกวิเคราะห์ดั้งเดิม เพื่อให้มั่นใจว่ามีความสอดคล้องกันอย่างสมบูรณ์ ด้วยข้อแม้ประการหนึ่ง (ดูด้านล่าง) ฉันยังไม่สามารถค้นหากรณีทดสอบที่ล้มเหลวได้ แม้ว่าจะมีอินพุตที่สุดขั้วหรือแปลกประหลาดก็ตาม
  • ความคิดเห็น HTML และ<noinclude>และ แท็ <includeonly><onlyinclude>ทั้งหมดได้รับการจัดการอย่างถูกต้อง โดยค่าเริ่มต้น จะถือว่าข้อความที่ป้อนควรถือเป็นการรวม เพื่อวัตถุประสงค์ของแท็กรวม สิ่งนี้สามารถเปลี่ยนแปลงได้ด้วยพารามิเตอร์
  • มันเร็วและเบามากสำหรับสิ่งที่เป็นอยู่: เช่น wikt:人 ดึงข้อมูลจากหน้าอื่นหลายร้อยหน้าเพื่อดึงการทับศัพท์ภาษาจีน ซึ่งจำเป็นต้องเรียกโมดูลนี้ทุกครั้ง สิ่งที่สิ้นเปลืองทรัพยากรมากที่สุดคือเวลาที่หลีกเลี่ยงไม่ได้ที่ใช้โดย วิธีการ mw.titleของ ' :getContent()ไม่ใช่การแยกวิเคราะห์ตัวเอง (ซึ่งสามารถเห็นได้ในโปรไฟล์การแยกวิเคราะห์ในหน้านั้น)
  • ข้อแม้ก็คือมันยังไม่มี (ยัง) มีการจัดการพิเศษสำหรับแท็ก parser เช่น<ref>. มันรู้ว่าพวกเขาอยู่ที่นั่น แต่ยังไม่รู้วิธีพิเศษต่างๆ ที่แต่ละคนต้องได้รับการจัดการ ในบางกรณีการดำเนินการนี้ตรงไปตรงมามาก (เช่น<nowiki>) และในบางกรณีไม่ตรงไปตรงมา (เช่น<gallery>) ดังนั้นการสนับสนุนสำหรับสิ่งเหล่านี้จะใช้เวลาระยะหนึ่ง ในขณะนี้ สิ่งใดก็ตามระหว่างแท็กดังกล่าวจะถือเป็นข้อความดิบ (เช่น ราวกับว่าอยู่ในแท็ก nowiki)

ฉันมั่นใจพอสมควรว่ามันเป็นตัวแยกวิเคราะห์มาร์กอัปวิกิที่ทรงพลังที่สุดที่ยังเขียนด้วยภาษา Lua (แม้ว่าฉันยินดีที่จะพิสูจน์ว่าผิด!) โปรดแจ้งให้เราทราบหากคุณคิดว่าสิ่งนี้อาจมีประโยชน์สำหรับสิ่งใดๆ ก็ตาม และเรายินดีที่จะช่วยในการออกแบบการใช้งานใดๆ Theknightwho ( พูดคุย ) 16:21, 13 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]

แม่แบบ:การแก้ไขความกำกวมของหมวดหมู่

{{ Category disambiguation }} สามารถใช้ Lua ได้หรือไม่ จะต้องมีวิธีที่ดีกว่าการใช้เงื่อนไข 50 ข้อ ขอบคุณ! House Blaster  ( พูดคุย  · เขา/เขา) 22:49, 13 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]

เทมเพลตจะไม่ถูกแปลงเป็น Lua เพียงเพราะว่าซ้ำกัน พวกเขาสามารถเป็นได้ แต่ฉันไม่คิดว่าฉันจะมาที่นี่อิซโน ( พูดคุย ) 00:29, 14 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]
@ Iznoถ้าฉันพูดตามตรง นี่ดูเหมือนเทมเพลตที่สมบูรณ์แบบสำหรับการแปลงเป็น Lua ด้วยเหตุผลสามประการ:
  • มันจะลดจำนวนโค้ดลงอย่างมาก เพราะมันจะเป็นการวนซ้ำแบบธรรมดา รหัสที่ซ้ำกันทำให้ปวดหัวในการบำรุงรักษาและน่ารำคาญในการแก้ไข
  • ไม่มีการจำกัดจำนวนอาร์กิวเมนต์ที่สามารถส่งผ่านเข้าไปได้ (ปัจจุบันคือ 100)
  • การเรียกเทมเพลตจำนวนมากเช่นนี้ช้ามากเมื่อเปรียบเทียบกัน ซึ่งอาจส่งผลต่อหน้าขนาดใหญ่ได้
Theknightwho ( พูดคุย ) 14:29, 14 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]
มีใครอยากจะแยกแยะหมวดหมู่ต่างๆ มากกว่า 50 หมวดหมู่จริงๆ บ้างไหม? จะมีสักครั้งไหมที่ {{ Category disambiguation }} ไม่ได้เป็นเพียงสิ่งเดียวบนหน้าเว็บ และประสิทธิภาพบนหน้าเว็บขนาดใหญ่จึงมีความสำคัญหรือไม่ ฉันไม่คิดอย่างนั้น เมื่อพิจารณาถึงอัตราการแก้ไขโดยเฉลี่ยของการแก้ไขหนึ่งครั้งต่อสองปี ฉันไม่คิดว่าการบำรุงรักษาจะเป็นปัญหา - ใช้เวลาในการพูดคุยและทำ Conversion มากกว่าที่จะได้รับการประหยัดเวลาเมื่อทำเสร็จแล้ว* Pppery * เริ่มแล้ว... 14:49 น. 14 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]
ทั้งหมดนี้ล้วนเป็นคุณประโยชน์ของลัวะโดยทั่วไป พวกเขาช่วยเทมเพลตเฉพาะนี้หรือไม่? ไม่ ไม่จริงๆ ไม่มีอะไรซับซ้อนเกี่ยวกับเรื่องนี้จนข้อดีของภาษาที่แตกต่างกันมีมากกว่าเชิงลบของภาษาอื่น
ตามที่กล่าวไว้ จากข้อเสนอแนะนี้ บางทีคุณควรลองแปลงมัน เทมเพลตแบบเรียบง่ายเป็นเทมเพลตที่ดีที่สุดสำหรับการเริ่มต้นอิซโน ( พูดคุย ) 18:10, 14 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]
คุณกำลังตอบกลับ Theknightwho ผู้เขียนโมดูล Lua ที่ซับซ้อนที่สุดชิ้นหนึ่งที่ฉันเคยเห็น ฉันไม่คิดว่าพวกเขาต้องการเทมเพลตง่ายๆในการเริ่มต้นด้วย :) — Martin ( MSGJ  ·  พูดคุย ) 21:17, 14 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]
ฉันคิดว่าความคิดเห็นนั้นควรส่งถึง HouseBlaster ถึงแม้จะมีการเยื้องก็ตาม* Pppery * เริ่มแล้ว... 21:43, 14 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]
ไม่ มันมีไว้สำหรับ Theknight ซึ่งฉันแค่ 1) ไม่รู้ว่าพวกเขาเป็นคนละคนกับ House และ 2) ไม่รู้เครดิตของทุกคน :) ฉันไม่ได้หยุดใครจากการแปลงอะไรเป็น Lua ถ้าพวกเขาต้องการใช้เวลากับมัน ( WP:VOLUNTEER ) ฉันแค่เชื่อมั่นอย่างแปลกประหลาดว่าเทมเพลตนี้ไม่ต้องการมันด้วยเหตุผลที่ระบุไว้แล้ว แต่ฉันยินดีที่จะเปลี่ยนเส้นทางข้อเสนอแนะไปยังเฮาส์อิซโน ( พูดคุย ) 22:01, 14 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]
@ Pppery @ Iznoคุณทำคะแนนได้ดี และฉันเพิ่งดูโค้ดดิบเมื่อฉันแสดงความคิดเห็นก่อนหน้านี้เท่านั้น ดังที่กล่าวไว้ ฉันได้ทำเวอร์ชันแซนด์บ็อกซ์ที่Module:Sandbox/Theknightwho/Category disambiguationซึ่งออกแบบมาเพื่อแทนที่การเรียก Cmbox ในเทมเพลต เนื่องจากสิ่งนี้ดูค่อนข้างตรงไปตรงมา ข้อแตกต่างประการหนึ่งคือจะเกิดข้อผิดพลาดหากคุณระบุพารามิเตอร์น้อยกว่าสี่ตัว (เนื่องจากเป็นค่าขั้นต่ำที่จะระบุสองหมวดหมู่) แต่สามารถลบออกได้อย่างง่ายดายTheknightwho ( พูดคุย ) 01:14, 15 กุมภาพันธ์ 2567 (UTC) [ตอบกลับ]

วิธีการ

ถ้า x เป็นสตริง เหตุใดฉันจึงสามารถใช้x:lower()เป็นทางลัดได้string.lower(x)แต่ถ้า y เป็นตาราง ฉันก็ใช้y:concat()เป็นทางลัดไม่ได้สำหรับtable.concat(y)? — Martin ( MSGJ  ·  พูดคุย ) 13:01, 22 มีนาคม 2567 (UTC) [ตอบกลับ]

@ MSGJ :นี่เป็นเพราะว่าวัตถุสตริงใน Lua มี metatable โดยที่__indexชี้ไปที่ตารางstringในไลบรารีมาตรฐาน ตารางตามค่าเริ่มต้นจะไม่มี metatable (สันนิษฐานว่าโปรแกรมเมอร์มักใช้ metatables แบบกำหนดเองสำหรับตารางในโปรแกรมของพวกเขา) ในการแกะคำอธิบายนั้น คุณจำเป็นต้องรู้ว่าเมตาเทเบิลทำงานอย่างไร มีคำอธิบายที่ดีทีเดียวในบทที่ 13 ในหนังสือ Programming in Lua นอกจากนี้ยังมีรายละเอียดเพิ่มเติมเล็กน้อยเกี่ยวกับการจัดการไลบรารีสตริงที่ metatable ที่นี่ — คุณ Stradivarius ♪ พูดคุย ♪ 13:51, 22 มีนาคม 2567 (UTC) [ตอบกลับ]
หมายความว่าถ้าคุณใช้setmetatable(t, y)คุณก็สามารถใช้t:concat()? —  Jts1882  |  พูดคุย 14:29, 22 มีนาคม 2567 (UTC) [ตอบกลับ]  
ไม่เว้นแต่t.concatเป็นฟังก์ชัน
t:concat()ถูกกำหนดให้t.concat(t)เป็น
เพื่อให้อย่างหลังใช้งานได้t.concatก็ต้องเป็นฟังก์ชัน
ตัวอย่างการทำงาน:
t  =  {  'abc' ,  'def' ,  'z'  } 
y  =  {  __index  =  {  concat  =  function ( x )  return  string.reverse ( table.concat ( x ))  ปลาย }  } 
setmetatable ( t ,  y ) 
z  =  เสื้อ: concat ()   -- z = 'zfedcba'
Johnuniq ( พูดคุย ) 05:33, 23 มีนาคม 2567 (UTC) [ตอบกลับ]
ขอขอบคุณทั้งสองสำหรับการตอบกลับของคุณ มีหลายอย่างที่ต้องดำเนินการ แต่ดูมีประโยชน์/น่าสนใจมาก มีวิธีง่ายๆ ในการดำเนินการดังต่อไปนี้:
  • เชื่อมโยงตารางใดตารางหนึ่งกับไลบรารีตารางมาตรฐาน
  • เชื่อมโยงตารางทั้งหมดตามค่าเริ่มต้นกับไลบรารีตารางมาตรฐาน
— Martin ( MSGJ  ·  พูดคุย ) 09:34, 25 มีนาคม 2567 (UTC) [ตอบกลับ]
ไม่ ไม่มีวิธีที่ดีในการเปลี่ยนแปลงวิธีtableการทำงาน ฉันแนะนำให้ใช้มาตรฐานtable.concatและใช้ชีวิตร่วมกับมัน อย่างไรก็ตาม เป็นไปได้ที่จะรวมสิ่งนี้ไว้กับโต๊ะตัวเดียว
t  =  {  'def' ,  'abc' ,  'A'  } 
mt  =  {  __index  =  {  concat  =  table.concat ,  sort  =  table.sort  }  } 
setmetatable ( t ,  mt ) 
a  =  t : concat ()   -- ' defabcA' 
t : sort () 
b  =  t : concat ()   -- 'Aabcdef'
ค้นหาCollectionที่Module:Ageเพื่อดูว่าบางครั้งฉันได้กำหนดรายการง่ายๆ อย่างไร การติดตามเป็นเรื่องแปลกมาก แต่Module:IPblockมีตัวอย่างเพิ่มเติม ได้แก่:sort(). Johnuniq ( พูดคุย ) 04:24, 26 มีนาคม 2567 (UTC) [ตอบกลับ]
แปลจาก "https://en.wikipedia.org/w/index.php?title=Wikipedia_talk:Lua&oldid=1215614100"