Quand est-il jugé approprié d'utiliser StringIO de Ruby plutôt que de simplement utiliser String?
Je pense que je comprends la différence fondamentale entre eux comme le souligne " Qu'est-ce que la classe StringIO de Ruby vraiment? ", que StringIO permet de lire et d'écrire de/vers une chaîne de manière orientée flux. Mais qu'est-ce que cela signifie pratiquement?
Quel est un bon exemple d'utilisation pratique de l'utilisation de StringIO alors que simplement utiliser String ne le couperait pas vraiment?
Fondamentalement, il fait ressembler une chaîne à un objet IO, d'où le nom StringIO.
La classe StringIO possède les méthodes read
et write
, elle peut donc être transmise à des parties de votre code conçues pour lire et écrire à partir de fichiers ou de sockets. C'est bien si vous avez une chaîne et que vous voulez qu'elle ressemble à un fichier dans le but de tester votre code de fichier.
def foo_writer(file)
file.write "foo"
end
def test_foo_writer
s = StringIO.new
foo_writer(s)
raise "fail" unless s.string == "foo"
end
J'aime vraiment StringIO pour le cas d'utilisation de l'ajout de texte ligne par ligne sans avoir à utiliser "\n"
encore et encore. Par exemple, au lieu de cela:
s = ''
s << "\n" << "some text on a new line"
s << "\nthis is pretty awkward"
s = "#{s}\neven more ugly!"
Je peux le faire
s = StringIO.open do |s|
s.puts 'adding newlines with puts is easy...'
s.puts 'and simple'
s.string
end
Ce qui est beaucoup plus propre. Il n'est pas nécessaire d'utiliser la forme de bloc de String.IO
, vous pouvez créer un objet comme ceci: s = StringIO.new
mais peu importe, assurez-vous de garder à l'esprit que la chaîne réelle est accessible via le StringIO#string
méthode.