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.
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.
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.
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.
Recommended Posts