Récupérer les valeurs de Ruby's StringIO

Ruby a une classe appelée StringIO qui crée une chaîne en faisant semblant de l'écrire dans un fichier. C'est pratique à utiliser, mais j'y étais un peu accro.

Qu'est-ce que «String IO»?

Premièrement, il y a une classe appelée ʻIO qui contrôle la lecture et l'écriture dans les fichiers et les tubes, le déplacement des positions dans les fichiers, etc. Si la méthode de lecture / écriture prend la destination de sortie réelle avec ʻIO, elle peut être utilisée quelle que soit la destination d'accès réelle.

D'autre part, StringIO permet de gérer String avec l'interface de ʻIO. Vous pouvez récupérer la valeur sous forme de chaîne en passant StringIO à une méthode qui prend ʻIO comme argument.

Il n'y a pas de relation d'héritage entre StringIO et ʻIO`, et il est implémenté en tant que typage canard.

Exemple d'échec de récupération de valeur

J'ai donc essayé d'obtenir la valeur avec StringIO, mais parfois cela échouait.

Exemple d'échec


sio = StringIO.new
SomeAPI.download(key, output: sio)
data = sio.read

Puisque c'est ʻIO, j'ai pensé que je devrais faire read, mais avec ça, la valeur qui peut être prise dans data` sera une chaîne de caractères vide.

Facteurs d'échec et remèdes

Bien que ce soit une cause d'échec, StringIO enregistre également la position actuelle, donc si vous répétez l'ajout et écrivez dans StringIO, la position est à la fin. Même si vous faites read tel quel, rien ne peut être pris car il est déjà à la fin.

Bien sûr, vous pouvez faire rembobiner puis lire, mais même si vous ne le faites pas, vous pouvez utiliser StringIO # string pour obtenir la chaîne que vous avez comme tampon.

Lien externe

Recommended Posts

Récupérer les valeurs de Ruby's StringIO