Comment puis-je convertir un IO objet d'une chaîne de caractères en Ruby?

Je travaille avec une IO objet (certains STDOUT texte de sortie), et je suis en train de convertir une chaîne de caractères afin que je pouvez faire un peu de traitement de texte. Je voudrais faire quelque chose comme ceci:

my_io_object = $stdout
#=> #<IO:<STDOUT>>

my_io_object.puts('hi')  #note: I know how to make 'hi' into a string, but this is a simplified example
#=>hi

my_io_object.to_s

J'ai essayé quelques petites choses et eu quelques erreurs:

my_io_object.read 
#=> IOError: not opened for reading

my_io_object.open
#=> NoMethodError: private method `open' called for #<IO:<STDOUT>>

IO.read(my_io_object)
#=> TypeError: can't convert IO into String

J'ai lu dans les IO méthodes de la classe, et je ne peux pas comprendre comment manipuler les données dans l'objet. Des suggestions?

  • "IOError: pas ouvert pour la lecture" doit être un bon indice. Essayez de rechercher ladite erreur.
  • Vous n'avez pas dit clairement ce que vous essayez de faire. Expliquer ce que c'est que vous voulez faire, et nous pouvons probablement vous donner une meilleure façon d'y arriver. Comment en êtes-vous de votre STDOUT texte?
  • Merci, @theTinMan. Toutes mes excuses pour le manque de clarté, c'est un reflet de ma confusion. J'ai fini par résoudre cela en dirigeant le STDOUT vers un StringIO objet.
  • Diriger STDOUT vers un StringIO est généralement un signe de faire quelque chose de mal. Créer une nouvelle question (parce que c'est un autre sujet) et d'expliquer ce que vous essayez de faire, pour voir comment vous l'avez accompli à l'aide de votre chemin, et demander un plus direct/le moyen le plus propre de le faire. Trop souvent nous avons la tête dans le mauvais chemin très tôt dans le code et ne peut pas voir une meilleure façon de partir de ce lieu, et elle prend d'autres yeux pour regarder et où on s'est trompé.
InformationsquelleAutor MothOnMars | 2013-03-13