Получение последней строки, напечатанной в Ruby - PullRequest
1 голос
/ 31 марта 2011

Есть ли способ получить вывод последней строки, отправленной на вывод?Например:

 puts "Hello"
 puts _+" World"

Вернет

 Hello
 Hello World

Задание, над которым я работаю, включает в себя максимально возможное сведение к минимуму кода.Приведенный выше пример не является присваиванием, но если такая переменная существует, это, безусловно, поможет.

Спасибо

** EDIT **

@У gnibbler есть самый близкий ответ на то, что я ищу.Это не имеет никакого отношения к расстоянию.Мне нужно повторно использовать вывод данных в предыдущей строке, а не добавлять к ней.Другой пример:

 puts "foobar"   // foobar
 puts _.reverse  // raboof

Ответы [ 4 ]

6 голосов
/ 31 марта 2011

Да, это возможно.Вам нужно переопределить метод Kernel::

>> puts "hello" 
=> "hello"
>> puts _ + " word"
=> "hello word"
>> _
=> "hello word"
2 голосов
/ 31 марта 2011

Специальной переменной для этого

не существует, кроме патчей (который будет противоречить вашему требованию минимизировать код), вы можете использовать такой шаблон

puts w="Hello"
puts w=(w+" World")
puts w=(w.reverse)

и т. Д..

1 голос
/ 31 марта 2011

Есть ли причина, по которой вы хотите это сделать? Возможно, есть другие решения.Если вы действительно хотите это сделать, вы можете сделать так:

module Kernel
  alias_method :puts_with_save, :puts
  def puts_with_save arg_
    puts arg_
    $LastPuts = arg_
  end
end

puts_with_save "hello" 
puts_with_save $LastPuts + " shanison"

Это должно работать так, как вы ожидали.Но я представляю глобальный $ LastPuts для вашей программы.

0 голосов
/ 31 марта 2011

Единственное, о чем я могу думать, это то, что, если бы вы знали, что используете puts, вы могли бы исправить это своей собственной версией, чтобы дать ей «память», соответствующую вашим целям. Однако, похоже, что в вашем случае вы также можете использовать отдельный механизм вместо того, чтобы переопределять поведение по умолчанию puts.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...