tôi đang tạo ra một ứng dụng đường ray và đã sử dụng mã này trong một trong những phương pháp của tôiTại sao tôi cần sử dụng .inject (0) thay vì .inject để thực hiện công việc này?
item_numbers.inject(0) {|sum, i| sum + i.amount}
ITEM_NUMBERS đã là một mảng các đối tượng từ bảng ITEM_NUMBERS tôi. Phương thức .amount mà tôi áp dụng cho chúng tra cứu giá trị của một item_number trong một bảng riêng biệt và trả về nó như là một đối tượng BigDecimal. Rõ ràng là phương pháp tiêm sau đó thêm tất cả các đối tượng i.amount trả về và điều này hoạt động tốt.
Tôi chỉ tò mò là tại sao nó không hoạt động khi tôi đã viết bản Tuyên Bố này như
item_numbers.inject {|sum, i| sum + i.amount}
Theo cuốn sách cuốc đáng tin cậy của tôi thì cũng nên tương đương. Có phải vì i.amount là một BigDecimal? Nếu vậy, tại sao nó bây giờ làm việc? Nếu không, thì tại sao nó không hoạt động.
Bạn có thể thực hiện một bài kiểm tra nhỏ (10..15) .inject do | sum, i | p tổng sum + i cuối nó sẽ trở lại: 10, 21, 33, 46, 60 => 75 Như bạn thấy _sum_ được mục đầu tiên từ mảng như giá trị ban đầu – fl00r
Điều đó giải thích nó độc đáo. Cảm ơn. – brad