Tôi đã đọc this question và nó khiến tôi nghĩ tại sao người ta muốn sử dụng vòng lặp while khi phương pháp làm lại có thể được sử dụng thay thế. Tôi không thể tìm thấy sự khác biệt nào giữa hai người. Tôi biết rằng phương thức làm lại sẽ chạy lại khối mã và rằng trong khi các vòng lặp sẽ chạy lại khối mã miễn là điều kiện là đúng. Ai đó có thể đưa ra một ví dụ về lý do tại sao bạn muốn sử dụng cái này hay cái kia?Phương thức redo của Ruby so với vòng lặp
Trả lời
Lệnh redo
khởi động lại lặp hiện tại của một vòng lặp (mà không kiểm tra các điều kiện chấm dứt trong while
hoặc tiến lặp trong for
, ví dụ), bạn vẫn cần một vòng lặp của một số mô tả (ví dụ như một vòng lặp while
).
Đó là bằng chứng là câu trả lời bạn liên kết đến, trong đó có:
nums = Array.new(5){[rand(1..9), rand(1..9)]}
nums.each do |num1, num2|
print "What is #{num1} + #{num2}: "
redo unless gets.to_i == num1 + num2
end
Các .each
cung cấp các cấu trúc vòng lặp đó và tất cả các redo
làm là khởi động lại vòng lặp đó (mà không tiến tới nums
phần tử tiếp theo) nếu bạn nhận được câu trả lời sai.
Bây giờ bạn có thể thực sự sử dụng một vòng lặp while
đó như vòng lặp kiểm soát, tiến tới tiếp theo chỉ khi bạn nhận được nó phải:
nums = Array.new(5){[rand(1..9), rand(1..9)]}
index = 0
while index < 6 do
num1 = nums[index][0]
num2 = nums[index][1]
print "What is #{num1} + #{num2}: "
if gets.to_i == num1 + num2 then
index = index + 1
end
end
hoặc trong .each
bản thân mà không redo
:
nums = Array.new(5){[rand(1..9), rand(1..9)]}
nums.each do |num1, num2|
answer = num1 + num2 + 1
while answer != num1 + num2 do
print "What is #{num1} + #{num2}: "
answer = gets.to_i
end
end
nhưng không ai trong số chúng thanh lịch như giải pháp redo
, cung cấp một cách biểu cảm hơn để kiểm soát vòng lặp, phần mở rộng cho điều khiển thông thường bạn nhìn thấy bằng các ngôn ngữ khác, chẳng hạn như continue
hoặc break
.
- 1. BOOST_FOREACH so với vòng lặp
- 2. Đối với vòng lặp trong phương thức render phản ứng
- 3. Sự khác biệt về vòng lặp trong Ruby khi sử dụng Range so với Times
- 4. Phương thức "each()" của jQuery là một vòng lặp for?
- 5. Phương thức gửi của Ruby với nội suy biến khối
- 6. Pythonic tương đương với unshift hoặc redo?
- 7. `loop {}` so với `vòng lặp {ngủ 1}`
- 8. Aptana 3 ruby debugger - Ngoại lệ trong vòng lặp DebugThread: phương thức undefined `is_binary_data? '
- 9. Sao chép() so với vòng lặp for?
- 10. Con trỏ so với vòng lặp while - SQLServer
- 11. PDO :: fetchAll so với PDO :: tìm nạp trong vòng lặp
- 12. Biến địa phương trùng lặp (Đối với vòng lặp)
- 13. Vòng lặp trò chơi tốt hơn so với vòng lặp vô tận + khối?
- 14. Tại sao trễ hơn nhiều so với vòng lặp for trước vòng lặp for?
- 15. Vòng Ruby với bà
- 16. Qt foreach vòng lặp đặt hàng so với vòng lặp cho QList
- 17. jQuery tương đương với phương thức .send() của Ruby
- 18. Phiên bản Ruby của phương thức String
- 19. Chuyển đổi phương thức đệ quy đơn giản đệ quy trong vòng lặp vào phương thức lặp
- 20. Ruby on Rails link_to Với phương thức
- 21. Phương pháp lớp Ruby so với phương pháp trong Eigenclasses
- 22. Ruby cho lỗi vòng lặp với {} khối delimiter
- 23. Phương thức latch.await() của CountDownLatch so với Thread.join()
- 24. Cho cuối của một vòng lặp .each trong ruby
- 25. Ghi đè so với phương thức ẩn
- 26. Chức năng Ackermann so với n vòng lặp lồng nhau
- 27. Phương thức nhận giá trị của Go so với phương thức nhận con trỏ
- 28. chấm so với phương thức getter =
- 29. Vòng lặp sự kiện so với chặn đa luồng IO
- 30. Phương thức HTTP: DELETE so với POST
Câu trả lời hay. Bạn có biết nếu 'redo' được sử dụng rộng rãi không? Bạn có thường xuyên sử dụng nó không? Tôi chưa bao giờ có nhu cầu về nó, thích thay vì lặp lại với một điều tra viên hoặc vòng lặp cho đến khi tôi thoát ra, nhưng tôi chỉ là một người có sở thích, vì vậy có lẽ tôi đã xem xét một công cụ hữu ích. –
@Cary, tôi không sử dụng nó _that_ thường nhưng tôi đã sử dụng nó, trong một trường hợp rất giống với mã đã cho. Khi lặp qua bộ sưu tập mà bạn không có quyền kiểm soát thông qua chỉ mục, đôi khi có thể khởi động lại thành phần bộ sưu tập hiện tại, nếu xảy ra sự cố tạm thời (như người dùng nhập dữ liệu sai). – paxdiablo
@paxdiablo, cảm ơn rất nhiều vì câu trả lời rõ ràng này. – chell