Ho cercato le somiglianze/differenze tra i generatori Ruby e Python (noto come Enumerators
in Ruby), e per quanto posso dire che sono praticamente equivalenti.Generatori di Ruby vs generatori Python
Tuttavia, una differenza che ho notato è che i Generatori Python supportano un metodo close()
mentre Ruby Generator no. Dalla documentazione Python metodo close()
è detto di effettuare le seguenti operazioni:
solleva un GeneratorExit nel punto in cui è stato sospeso il funzionamento del generatore. Se la funzione di generatore poi solleva StopIteration (uscendo normalmente, oppure a causa di già essere chiuso) o GeneratorExit (da non cattura l'eccezione), torna vicino al chiamante ".
C'è una buona ragione per la quale Rubino Enumerators
non supportano il metodo close()
? O è un accidentale omissione?
ho anche scoperto che Ruby Enumerators
supporto di un metodo rewind()
ancora generatori Python non lo fanno ... c'è un motivo anche per questo?
Grazie
Curioso, ma non capisco come lo useresti: puoi fare un esempio? –
@Andrew Vit: questo può essere usato per causare risorse - connessioni database, file, ecc. - detenute dal generatore da ripulire.Impedirà inoltre ulteriori chiamate ai suoi metodi 'next' o' send' da altre parti del codice. Ad esempio, è possibile chiamare "chiudi" per indicare da uno dei numerosi consumatori di indicare agli altri che è stato trovato il valore desiderato. – intuited
@intuited, è il 'close()' di Python effettivamente usato anche se? Penso di aver letto da qualche parte che è considerato "arcano" dalla comunità di Python e non realmente utilizzato. – horseyguy