2011-10-09 28 views
5

thể trùng lặp:
Is there a reason that we cannot iterate on “reverse Range” in ruby?Tại sao không lạc hậu cho công việc vòng lặp trong ruby? ví dụ. for i in 10..1

này hoạt động giống như ma thuật.

for i in 1..10 
    ... 
end 

Không chỉ trực quan mà vòng lặp lạc hậu này cũng hoạt động không?

for i in 10..1 
    ... 
end 

Nếu có một số lý do cú pháp tại sao điều này không hoạt động, tôi cảm thấy như ruby ​​phải được thay đổi để cho phép. Nó chỉ là trực quan để viết lạc hậu cho vòng lặp theo cách đó.

+1

Bạn đang tìm kiếm cách giải quyết thực tế hoặc các lý do tại sao nó không hoạt động? – slhck

+0

Chỉ cần tự hỏi tại sao nó không hoạt động. Tôi biết các lựa chọn thay thế khác. –

+0

@closevoters: Câu hỏi về người mới đủ công bằng. Tôi mong đợi '10..1' làm việc khi tôi bắt đầu lập trình Ruby. –

Trả lời

11

1..10 thuộc phạm vi lớp, không được liên kết trực tiếp với bất kỳ cấu trúc vòng lặp nào. Và không có số nào lớn hơn 10 và nhỏ hơn 1, do đó phạm vi 10..1 trống.

PS Tôi không nhớ khi nào là lần cuối cùng tôi viết vòng lặp for in ruby. Có lẽ một cái gì đó từ http://www.ruby-doc.org/core-1.9.2/Enumerable.html sẽ phục vụ bạn tốt hơn?

+1

Giải thích tuyệt vời. – Problematic

+0

Cảm ơn bạn. Trong khi tôi làm việc với Rails, tôi không bao giờ phải đi qua sử dụng cho cũng không trong khi. Tôi chỉ muốn thử viết các phương pháp phân loại khác nhau với Ruby, và dành thời gian cố gắng tìm ra nơi tôi đã đi sai. Hóa ra tôi không thể làm lạc hậu cho vòng lặp như vậy. –

11

thử một cái gì đó giống như

10.downto(1) { |i| ... } 
Các vấn đề liên quan