J'ai lu récemment un joli post sur l'utilisation de l' StringIO
en Ruby. Ce que l'auteur ne mentionne pas, cependant, est qu' StringIO
est juste un "I". Il n'y a pas de "O". Vous ne pouvez pas le faire, par exemple:
s = StringIO.new
s << 'foo'
s << 'bar'
s.to_s
# => should be "foo\nbar"
# => really is ''`
Ruby a vraiment besoin d'un StringBuffer comme l'a fait la Java. StringBuffers servir deux objectifs importants. Tout d'abord, ils vous permettent de tester la sortie de la moitié de ce que Ruby StringIO n'. Deuxièmement, ils sont utiles pour la construction de longues chaînes de petites pièces -- quelque chose que Joel nous rappelle encore et encore est par ailleurs très très lent.
Est-il une bonne alternative?
@Mike Stone
Il est vrai que les Chaînes en Ruby sont mutables, mais cela ne signifie pas que nous devons toujours compter sur cette fonctionnalité. Si stuff
est grande, les performances et les besoins en mémoire de cette, par exemple, est très mauvais.
result = stuff.map(&:to_s).join(' ')
La "bonne" façon de le faire en Java:
result = StringBuffer.new("")
for(String s : stuff) {
result.append(s);
}
Bien que mon Java est un peu rouillé.
@Mike Stone #2: Whoah!!!!! Comment j'ai pu rater ça dans l'API? Je ne suis toujours pas sûr de la performance de StringIO, mais au moins, c'est maintenant "Ruby" problème, pas le mien :)