ฉีดเหมือนกับการลดทับทิมหรือไม่?


114

ผมเห็นว่าพวกเขาได้รับการบันทึกอยู่ด้วยกันที่นี่ พวกเดียวกันหรือเปล่า? ทำไม Ruby จึงมีนามแฝงมากมาย (เช่น map / collect for arrays) ขอบคุณมาก.

คำตอบ:


160

ใช่และยังเรียกfoldในภาษาโปรแกรมอื่น ๆ อีกมากมายและในวิชาคณิตศาสตร์ Ruby มีนามแฝงมากมายเพื่อให้ใช้งานง่ายสำหรับโปรแกรมเมอร์ที่มีภูมิหลังต่างกัน หากคุณต้องการใช้#lengthกับ an Arrayคุณสามารถทำได้ ถ้าอยากใช้#sizeก็ใช้ได้เช่นกัน!


4
หากคุณต้องการที่จะสร้างชื่อแทนของคุณเองคุณอาจจะสนใจในalias_method
Nick McCurdy

23
#length และ #count ไม่เทียบเท่าใน Ruby #length และ #size คือ
คำถาม Quolonel

9
3.length ให้ NoMethodError; ผลตอบแทน 3.size 4. เห็นได้ชัดว่า 3 ไม่ใช่อาร์เรย์ แต่ระวังการพิมพ์เป็ด! (3_000_000_000_000_000.size คืนค่า 8 และ 3_000_000_000_000_000_000_000_000_000_000_000_000_000_000.size ส่งคืน 20 ดูเหมือนว่าจะเป็นจำนวนหน่วยความจำที่ใช้)
ChrisPhoenix

18
อืมฉันคิดว่าเอกสาร Ruby ปัจจุบันruby-doc.org/core-2.2.3/Enumerable.html#method-i-reduceอาจจะดีกว่าถ้ามันบอกว่าเหมือนกันinjectเพื่อให้ผู้ใช้ไม่ต้องอ่านทั้งสอง คำอธิบายและลองดูว่าเหมือนกันไหม ... นี่ไม่เข้ากับหลักการ DRY หรือ?
nonopolarity

3
@ 太極者無極而生จุดดีฉันสับสนกับสิ่งนี้เช่นเดียวกับที่คุณคาดการณ์ไว้
neontapir

6

เวอร์ชันล่าสุดของเอกสารEnumerable#reduceระบุอย่างชัดเจน:

injectและreduceวิธีการที่มีชื่อแทน ไม่มีประโยชน์ด้านประสิทธิภาพอย่างใดอย่างหนึ่ง


1
ฉันชอบที่จะแยกมันตามวิธีการใช้งานซึ่งเห็นได้ชัดว่าเป็นเพียงแค่ความหมายเท่านั้น ถ้ามันเป็น proc ( &:+) ลดถ้ามันเป็นบล็อกฉีด
TheRealMrCrowley
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.