Câu hỏi này không phải là về cách sử dụng Enumerators trong Ruby 1.9.1 mà đúng hơn là tôi tò mò về cách chúng hoạt động. Dưới đây là một số mã:Làm thế nào để Enumerators làm việc trong Ruby 1.9.1?
class Bunk
def initialize
@h = [*1..100]
end
def each
if !block_given?
enum_for(:each)
else
0.upto(@h.length) { |i|
yield @h[i]
}
end
end
end
Trong đoạn mã trên tôi có thể sử dụng e = Bunk.new.each
, và sau đó e.next
, e.next
để có được mỗi phần tử liên tiếp, nhưng làm thế nào chính xác là nó đình chỉ thi công và sau đó nối lại tại đúng chỗ?
Tôi biết rằng nếu sản lượng trong 0.upto
được thay thế bằng Fiber.yield
thì thật dễ hiểu, nhưng đó không phải là trường hợp ở đây. Nó là một đồng bằng cũ yield
, vì vậy nó hoạt động như thế nào?
Tôi đã xem xét điều tra viên nhưng nó rất khó hiểu đối với tôi. Có lẽ ai đó có thể cung cấp một thực hiện trong Ruby, bằng cách sử dụng sợi, không 1.8.6 phong cách tiếp tục dựa trên điều tra, mà làm cho nó tất cả rõ ràng?
cảm ơn câu trả lời của bạn. vâng tôi yêu cầu khá nhiều chi tiết về điều này. cụ thể là tôi muốn biết nếu có thể thực hiện tất cả trong Ruby hay liệu có điều gì đó lén lút xảy ra trong C không thể xảy ra trong Ruby. Nếu có thể thực hiện nó hoàn toàn trong Ruby, tôi rất muốn xem mã! :) – horseyguy