Tôi đã nghiên cứu các điểm tương đồng/khác biệt giữa các trình tạo Ruby và Python (được gọi là Enumerators
trong Ruby), và cho đến nay tôi có thể nói chúng khá giống nhau.Máy phát điện Ruby và máy phát Python
Tuy nhiên, một sự khác biệt mà tôi đã nhận thấy là các Trình tạo Python hỗ trợ phương thức close()
trong khi Trình tạo Ruby không. Từ các tài liệu Python, phương pháp close()
được cho là thực hiện như sau:
Tăng một máy phát .Tại điểm dừng chức năng máy phát. Nếu chức năng máy phát điện sau đó nâng StopIteration (do xuất cảnh bình thường, hoặc do đã bị đóng cửa) hoặc GeneratorExit (bằng cách không thu hút sự ngoại lệ), lợi nhuận gần gọi của nó."
Có một lý do chính đáng tại sao của Ruby Enumerators
không hỗ trợ phương pháp close()
? Hay là một tình cờ thiếu sót?
tôi cũng phát hiện ra rằng Ruby Enumerators
hỗ trợ một phương pháp rewind()
chưa phát Python không ... là có một lý do cho điều này quá?
Cảm ơn
Tò mò, nhưng tôi không hiểu bạn sẽ sử dụng điều này như thế nào: bạn có thể đưa ra ví dụ không? –
@Andrew Vit: điều này có thể được sử dụng để gây ra các tài nguyên —các kết nối cơ sở dữ liệu, tệp, v.v. do máy phát điện giữ lại để được dọn sạch.Nó cũng sẽ ngăn chặn bất kỳ cuộc gọi nào nữa đến các phương thức 'next' hoặc' send' của nó từ các phần khác của mã. Bạn có thể gọi 'close', ví dụ, để chỉ ra từ một trong số một số người tiêu dùng để chỉ ra cho người khác rằng một giá trị mong muốn đã được tìm thấy. – intuited
@intuited, là của Python 'close()' thực sự thường được sử dụng mặc dù? Tôi nghĩ rằng tôi đọc một nơi nào đó mà nó được coi là 'arcane' bởi cộng đồng python và không thực sự được sử dụng. – horseyguy