ไม่มีความแตกต่างในความmap
เป็นจริงถูกนำมาใช้ใน C เป็นrb_ary_collect
และenum_collect
(เช่นมีความแตกต่างระหว่างmap
ในอาร์เรย์และใน Enum อื่น ๆ แต่ไม่มีความแตกต่างระหว่างmap
และcollect
)
ทำไมทั้งสองmap
และcollect
มีอยู่ในทับทิม? map
ฟังก์ชั่นนี้มีข้อกำหนดการตั้งชื่อจำนวนมากในภาษาต่างๆ Wikipedia ให้ภาพรวม :
ฟังก์ชั่นแผนที่มีต้นกำเนิดในภาษาโปรแกรมที่ใช้งานได้ แต่ได้รับการสนับสนุนในวันนี้ (หรืออาจกำหนด) ในภาษาเชิงกระบวนการเชิงวัตถุและหลายกระบวนทัศน์เช่นกัน: ในไลบรารีแม่แบบมาตรฐานของ C ++ จะถูกเรียกtransform
ในภาษา C # (3.0) ห้องสมุด LINQ Select
มันให้เป็นวิธีขยายที่เรียกว่า แผนที่ยังใช้งานบ่อยในภาษาระดับสูงเช่น Perl, Python และ Ruby; การดำเนินการถูกเรียกmap
ในภาษาทั้งสามนี้ นามแฝงสำหรับแผนที่นอกจากนี้ยังมีในทับทิม (จากสมอลล์ทอล์ค) [ผมขอย้ำ] Common Lisp นำเสนอฟังก์ชั่นคล้ายแผนที่ สิ่งที่สอดคล้องกับพฤติกรรมที่อธิบายไว้ที่นี่จะถูกเรียก(- ระบุว่ารถเข้าถึงโดยใช้การทำงานของ CAR)collect
mapcar
Ruby นำเสนอนามแฝงสำหรับโปรแกรมเมอร์จากโลก Smalltalk เพื่อให้รู้สึกเหมือนอยู่บ้านมากขึ้น
ทำไมจึงมีการใช้งานที่แตกต่างกันสำหรับอาร์เรย์และ enums? Enum เป็นโครงสร้างการทำซ้ำทั่วไปซึ่งหมายความว่าไม่มีทางที่ Ruby สามารถทำนายได้ว่าองค์ประกอบถัดไปสามารถเป็นอะไรได้ (คุณสามารถกำหนด enums ที่ไม่มีที่สิ้นสุดดูที่Primeสำหรับตัวอย่าง) ดังนั้นจึงต้องเรียกใช้ฟังก์ชันเพื่อรับองค์ประกอบที่ต่อเนื่องกัน (โดยทั่วไปจะเป็นeach
วิธีการ)
อาร์เรย์เป็นคอลเลกชันที่พบบ่อยที่สุดดังนั้นจึงมีเหตุผลที่จะเพิ่มประสิทธิภาพให้เหมาะสม เนื่องจาก Ruby รู้มากเกี่ยวกับวิธีการทำงานของอาเรย์จึงไม่จำเป็นต้องโทรeach
แต่สามารถใช้การชี้แบบง่าย ๆซึ่งทำได้เร็วกว่ามาก
การเพิ่มประสิทธิภาพที่คล้ายกันที่มีอยู่สำหรับจำนวนของวิธีการเช่นอาร์เรย์หรือzip
count
map
เป็นที่ต้องการในรหัสกอล์ฟ