Chúng ta đã nói về retry từ khóa trong khi thảo luận về việc thử lại sau các ngoại lệ. Bản sao ít được biết đến của nó redo hoạt động tương tự, nhưng chạy lại vòng lặp thay vì toàn bộ khối.
Số redo từ khóa
Như chúng ta đã tìm hiểu trong bài viết trước của Học viện, retry cho phép bạn thử lại một đoạn mã trong một khối:
Ví dụ này in từ "Lặp lại" vào bảng điều khiển trước khi đưa ra một ngoại lệ. Các khối cứu hộ được thực thi, gọi retry và bắt đầu lại khối từ đầu. Điều này dẫn đến việc chương trình của chúng tôi in liên tục Iteration . redo từ khóa cho phép bạn đạt được hiệu quả tương tự khi sử dụng vòng lặp. Điều này hữu ích trong những trường hợp bạn cần thử lại trong khi lặp lại chẳng hạn.
Điều này sẽ in:
Lưu ý số lần lặp vẫn giữ nguyên như thế nào? Nó sẽ lùi bước thực thi về điểm bắt đầu của vòng lặp. Biến thể mã này sử dụng retry sẽ in kết quả đầu ra giống hệt nhau:
Bạn có thể sử dụng redo để thực hiện thử lại trong một vòng lặp. Trong ví dụ tiếp theo, chúng ta có một hàng công việc. Họ trả về :success hoặc :failure . Chúng tôi tiếp tục chạy lại vòng lặp tương tự cho đến khi công việc thành công.
Số next từ khóa
Nếu bạn muốn chuyển sang lần lặp tiếp theo của vòng lặp, thay vì quay lại điểm bắt đầu của vòng lặp hiện tại, bạn có thể sử dụng next .
Điều này sẽ in:
Xem cách bộ đếm lặp tiếp tục tăng? Trong hầu hết các trường hợp sử dụng next là những gì bạn muốn. Nhìn vào redo nếu bạn cần một vòng lặp chạy với số lần chính xác hoặc cần xử lý lỗi khi lặp qua một mảng.
Chúng tôi hy vọng bạn đã học được điều gì đó mới mẻ về việc thực hiện lại các bước lặp trong vòng lặp và muốn biết bạn nghĩ gì về bài viết này (hoặc bất kỳ bài viết nào khác trong loạt bài của Học viện AppSignal). Vui lòng cho chúng tôi biết suy nghĩ của bạn hoặc nếu bạn có bất kỳ chủ đề Ruby nào mà bạn muốn tìm hiểu thêm.
Thijs Cadier
Giám đốc Công nghệ &Đồng sáng lập. Thijs đôi khi mất tích hàng tháng trời để làm việc trên cơ sở hạ tầng của chúng tôi. Đảm bảo hàng tỷ yêu cầu của chúng tôi được xử lý chính xác. Tay trống giỏi nhất của công ty.
Tất cả bài viết của Thijs Cadier