He estado investigando las similitudes/diferencias entre los generadores Ruby y Python (conocidos como Enumerators
en Ruby), y hasta donde puedo decir que son prácticamente equivalentes.Generadores de Ruby vs generadores Python
Sin embargo, una diferencia que he notado es que los generadores de Python admiten un método close()
, mientras que los generadores de Ruby no lo hacen. A partir de los documentos de Python se dice que el método close()
para hacer lo siguiente:
plantea una GeneratorExit en el punto donde se ha detenido la función de generador. Si la función de generador de entonces plantea StopIteration (saliendo normalmente, o debido a que ya se están cerrados) o GeneratorExit (por no agarrar la excepción), los rendimientos cercanos a su llamador."
¿Hay una buena razón por Rubí Enumerators
no son compatibles con el método close()
? ¿O es una omisión accidental ?
también descubrí que Ruby Enumerators
apoyo un método rewind()
todavía generadores de Python no lo hacen ... ¿hay alguna razón para esto también?
Gracias
Curioso, pero no entiendo cómo usarías esto: ¿puedes dar un ejemplo? –
@Andrew Vit: esto se puede utilizar para hacer que los recursos (conexiones de base de datos, archivos, etc.) que contiene el generador se limpien.También evitará más llamadas a sus métodos 'next' o' send' de otras partes del código. Por ejemplo, puede llamar a 'cerrar' para indicar a uno de varios consumidores que indique a otros que se ha encontrado un valor deseado. – intuited
@intuited, ¿se usa comúnmente el término 'close()' de Python? Creo que leí en algún lado que la comunidad de Python lo considera "arcano" y que realmente no lo utilizan. – horseyguy