有没有办法让最后一个字符串的输出发送到输出?例如:
puts "Hello"
puts _+" World"
将返回
Hello
Hello World
我正在进行的任务涉及尽可能减少代码。上面的例子不是赋值,但如果存在这样的变量,它肯定会有所帮助。
由于
** 编辑 **
@gnibbler对我正在寻找的答案最接近。这与间距无关。我需要在前一行重用数据输出,而不是附加到它。另一个例子是:
puts "foobar" // foobar
puts _.reverse // raboof
答案 0 :(得分:6)
是的可能。你需要覆盖像这样的Kernel :: puts方法
module Kernel
alias_method :old_puts, :puts
def puts arg
old_puts arg
$_=arg # $_ is a global variable, holds the last printed item
end
end
并像
一样使用它>> puts "sample"
=> "sample"
>> _
=> "sample"
>> _.reverse
=> "elpmas"
_将始终保留最后打印的值
意味着
>> puts "hello"
=> "hello"
>> puts _ + " word"
=> "hello word"
>> _
=> "hello word"
答案 1 :(得分:2)
没有特殊变量
除了修补看跌期权(这会与您最小化代码的要求相冲突),您可以使用这样的模式
puts w="Hello"
puts w=(w+" World")
puts w=(w.reverse)
等
答案 2 :(得分:1)
您是否有理由这样做?可能还有其他解决方案。如果你真的想这样做,你可以这样做:
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。
答案 3 :(得分:0)
我唯一能想到的是,如果你知道你使用的是puts
,你可以使用自己的版本修补它,以便为你的目标提供一个“记忆”。但是,在您的情况下,您可能会使用单独的机制而不是覆盖puts
的默认行为。