ทำไมโอเปอเรเตอร์การแข่งขันอัจฉริยะของ Perl 5 จึงถือว่าเสีย [ปิด]


17

ฉันเห็นความคิดเห็นจำนวนหนึ่งทั่วทั้งเว็บตัวดำเนินการจับคู่แบบอัจฉริยะของ Perl เสียแล้ว ฉันรู้ว่าเดิมเป็นส่วนหนึ่งของ Perl 6 จากนั้นถูกนำมาใช้ใน Perl 5.10 จากสเป็ครุ่นเก่าและได้รับการแก้ไขแล้วใน 5.10.1 เพื่อให้ตรงกับสเป็ค Perl 6 ปัจจุบัน

ปัญหาได้รับการแก้ไขแล้วใน 5.10.1+ หรือมีปัญหาอื่น ๆ เกี่ยวกับตัวดำเนินการ smart-match ที่ทำให้เกิดปัญหาในทางปฏิบัติหรือไม่

ปัญหาคืออะไร

มีรุ่นที่ยังปรับปรุงเพิ่มเติม (อาจจะ Perl 6,) ที่แก้ไขปัญหาหรือไม่

แก้ไข:เพื่อความกระจ่างแจ้งฉันไม่ได้ถามเกี่ยวกับข้อบกพร่อง แต่เป็นการแสดงความคิดเห็นว่าพฤติกรรมที่ตั้งใจไว้ของ~~ไม่ดี


สิ่งนี้จะไม่ดีกว่าหรือไม่?

3
ดังนั้นดูเหมือนว่าจะเกลียดคำถามที่ไม่สามารถตอบด้วยตัวอย่างโค้ดในวันนี้
Sean McMillan

2
ฉันไม่คิดว่ามันเป็นของ SO แต่จะขอคำอธิบายเชิงความคิดเกี่ยวกับสาเหตุที่ตัวดำเนินการจับคู่การแข่งขันสมาร์ทของ Perl ถูกทำลาย
yannis

1
จากสิ่งที่ฉันเห็นในลิงก์ของคุณปรากฏว่าการจับคู่แบบสมาร์ทนั้นเป็นแบบซ้ำ (หรือ) แบบซ้ำดังนั้นจึงอาจนำไปสู่การวนซ้ำแบบไม่สิ้นสุดได้เนื่องจากอาร์เรย์ (อาจเป็นทางอ้อม) มีการอ้างอิงถึงตัวเอง
281377

2
@SeanMcMillan - ดังนั้นเกลียดหลายสิ่งหลายอย่างในวันนี้: /
Rook

คำตอบ:


14

คนมักจะสับสนกับปัญหาที่เกิดขึ้นกับผู้ประกอบการ smartmatch กับผู้ที่เกิดขึ้นกับโครงสร้างเช่นปัญหาของศัพท์given/when$_

ฉันเห็นว่าถ้าคุณใช้ตัวดำเนินการ smartmatch กับตัวอักษรเท่านั้นคุณจะไม่เสียสติ ฉันไม่สามารถสัญญาเกี่ยวกับสถานการณ์อื่น ๆ ได้ การพยายามคิดออกว่า$a ~~ $bกำลังทำอะไรอยู่นั้นเพียงพอที่จะผลักดันให้มนุษย์ที่มีคุณธรรมสามารถร้องกรีดร้องด้วยความบ้าคลั่งและใช้ภาษาโปรแกรมอื่นได้พร้อมกัน

หรืออย่างน้อยนั่นคือการใช้เวลาที่ผมได้จากลาร์รีเมื่อเขาได้รับการแก้ไขส่วน smartmatch ของรุ่นที่ 4 ของการเขียนโปรแกรม Perl


4

ผู้ดำเนินการจับคู่ที่ชาญฉลาดไม่ได้"เสีย"แต่มีข้อบกพร่องมากมาย Perl v5.12 แก้ไขแล้วและ Perl v5.14 ทำให้สมบูรณ์แบบ IMHO ดังนั้นเพื่อตอบคำถามของคุณPerl v5.12 ขึ้นไปแก้ไขปัญหานี้ คุณสามารถลองกับ Perl v5.10 รุ่นใหม่กว่า แต่ฉันรู้ว่ามันทำงานได้ดีขึ้นใน Perl 5.12+

แก้ไข: เพื่อตอบการแก้ไขของคุณดูบล็อกนี้ หลังจากอ่านบทความนี้ฉันเชื่อว่าเพียงพอที่จะตอบคำถามของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.