Chúng ta hãy thử một lời giải thích:
Bạn định nghĩa một mảng
grades = [88,99,73,56,87,64]
và chuẩn bị một biến để lưu trữ các tổng:
sum = 0
grades.length
là 6 (có 6 yếu tố trong mảng), (grades.length - 1)
là 5.
with 0.upto(5)
bạn lặp lại từ 0 đến 5, loop_index
sẽ là 0, sau đó 1 ...
Phần tử đầu tiên của mảng là grades[0]
(chỉ mục trong mảng bắt đầu bằng 0). Đó là lý do tại sao bạn phải trừ 1 từ số phần tử.
0.upto(grades.length - 1) do |loop_index|
Thêm giá trị loop_index để tính tổng.
sum += grades[loop_index]
end
Bây giờ bạn lặp lại từng phần tử và có tổng tất cả các phần tử của mảng.
Bạn có thể tính trung bình:
average = sum/grades.length
Bây giờ bạn viết kết quả vào stdout:
puts average
Đây là một tổ chức phi-ruby-như cú pháp . Ruby giống như bạn sẽ làm điều đó như thế này:
grades = [88,99,73,56,87,64]
sum = 0
grades.each do |value|
sum += value
end
average = sum/grades.length
puts average
Phụ lục dựa trên Marc-Andrés bình luận:
Bạn có thể sử dụng cũng inject
để tránh để xác định số tiền ban đầu:
grades = [88,99,73,56,87,64]
sum = grades.inject do |sum, value|
sum + value
end
average = sum/grades.length
puts average
Hoặc thậm chí ngắn hơn:
grades = [88,99,73,56,87,64]
average = grades.inject(:+)/grades.length
puts average
Bạn có thể muốn tìm một cuốn sách khác. Trong trường hợp này, 'upto' <' grade.length.times' <'grade.each' <' grades.inject (0,: +) '. –
Hy vọng rằng cuốn sách của bạn không nói 'upto' là một toán tử; đó là một phương pháp thông thường. Đã chỉnh sửa câu hỏi của bạn cho phù hợp. –
@ Marc-AndréLafortune Rất nhiều sách Ruby giống như vậy - chúng cho bạn biết chính xác * những gì * Ruby có, nhưng không * tại sao * bạn sẽ sử dụng cách này sang cách khác. :( –