CHỈNH SỬA: Vì cú pháp CoffeeScript 1.5 by -1
được hỗ trợ.
Trước tiên, bạn nên tự làm quen với từ khóa by
, cho phép bạn chỉ định một bước. Thứ hai, bạn phải hiểu rằng trình biên dịch CoffeeScript mất một cách tiếp cận rất ngây thơ đến điểm cuối vòng lặp (xem issue 1187, mà Blender liên kết đến), có nghĩa là
for some in something by -1 # don't do this!!!
sẽ dẫn đến vô hạn loop-nó bắt đầu từ chỉ số 0 , tăng chỉ số lên -1 và sau đó đợi cho đến khi chỉ mục chạm vào something.length
. Thở dài.
Vì vậy, bạn cần phải sử dụng cú pháp dải vòng lặp thay vào đó, cho phép bạn chỉ định những thiết bị đầu cuối cho mình-nhưng cũng có nghĩa là bạn phải lấy các mặt hàng vòng lặp tự hỏi:
for i in [something.length - 1..0] by -1
some = something[i]
Rõ ràng đó là khá lộn xộn. Vì vậy, bạn nên xem xét kỹ lưỡng việc lặp lại qua số something.reverse()
thay thế. Chỉ cần nhớ rằng reverse()
sửa đổi mảng mà bạn gọi nó trên!Nếu bạn muốn giữ một mảng nhưng lặp trên nó về phía sau, bạn nên sao chép nó:
for some in something.slice(0).reverse()
Nguồn
2011-10-27 19:06:20
Tôi nghĩ bạn thậm chí không cần '-1'. 'for i in [sth.length-1..0]' hoạt động tốt –
@RicardoTomasi Bạn đúng rằng nó sẽ hoạt động mà không có 'by -1', nhưng nó kém hiệu quả hơn - hãy xem kết quả được biên dịch cho cả hai. Từ quan điểm của trình biên dịch, 'something.length' có khả năng âm, vì vậy bước này có khả năng là' 1' hoặc '-1'. –
+1 cho '.slice (0) .reverse()', chỉ là những gì tôi đang tìm kiếm! –