Tiêm có giống như giảm trong ruby ​​không?


114

Tôi thấy rằng chúng đã được ghi lại cùng nhau ở đây . Họ là những điều tương tự? Tại sao Ruby có rất nhiều bí danh (chẳng hạn như bản đồ / thu thập cho các mảng)? Cảm ơn rất nhiều.

Câu trả lời:


160

Có, và nó cũng được gọi foldtrong nhiều ngôn ngữ lập trình khác và trong Toán học. Ruby có rất nhiều bí danh để trực quan cho các lập trình viên có nền tảng khác nhau. Nếu bạn muốn sử dụng #lengthtrên một Array, bạn có thể. Nếu bạn muốn sử dụng #size, điều đó cũng tốt!


4
Nếu bạn muốn tạo bí danh của riêng mình, bạn có thể quan tâm đến alias_method .
Nick McCurdy

23
#length và #count không tương đương trong Ruby. # chiều dài và # kích thước là.
Câu hỏi Quolonel

9
3. sức mạnh cho NoMethodError; 3.size trả về 4. Rõ ràng 3 không phải là một mảng, nhưng hãy cẩn thận với kiểu gõ vịt! (3_000_000_000_000_000. kích thước trả về 8 và 3_000_000_000_000_000_000_000_000_000_000_000_000_000_000. kích thước trả về 20; có vẻ như đó là dung lượng bộ nhớ mà nó chiếm.)
ChrisPhoenix

18
hm, tôi nghĩ tài liệu Ruby hiện tại ruby-doc.org/core-2.2.3/Enumerable.html#method-i-reduce có thể tốt hơn nếu nó chỉ nói giống như injectvậy để người dùng không phải đọc hai và cố gắng tìm hiểu xem chúng có giống nhau không ... điều này không phù hợp với nguyên tắc DRY?
nonopolarity

3
@ 太極 者 無極 而 生, tốt quá, tôi đã bối rối vì điều này đúng như bạn dự đoán
neontapir

6

Các phiên bản mới hơn của tài liệu về Enumerable#reducechỉ định nó một cách rõ ràng:

Các injectreducephương thức là bí danh. Không có lợi ích hiệu suất cho cả hai.


1
tôi muốn tách chúng ra dựa trên cách nó được sử dụng, rõ ràng là chỉ về ngữ nghĩa. nếu một proc của nó ( &:+), giảm, nếu đó là một khối, bơm
TheRealMrCrowley
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.