我们知道
require 'pp'
a=["value1", "value2", "value3"]
pp a
pretty 将数组作为输出打印到控制台。如何将漂亮的输出转换为字符串(包含使事情变得漂亮的换行符的字符串等)?
...目的是从方法中返回那个漂亮的字符串。
我们知道
require 'pp'
a=["value1", "value2", "value3"]
pp a
pretty 将数组作为输出打印到控制台。如何将漂亮的输出转换为字符串(包含使事情变得漂亮的换行符的字符串等)?
...目的是从方法中返回那个漂亮的字符串。
string_value = a.pretty_inspect
#pretty_inspect
当您第一次需要“pp”时也会出现 - 请参阅:http ://ruby-doc.org/stdlib-2.1.0/libdoc/pp/rdoc/Kernel.html#method-i-pretty_inspect
如果您想要输出到irb
控制台的版本是
string_value = a.inspect
并且没有任何必要的要求。
这是捕获以下输出的一种非常简单pp
的方法:
需要'pp' asdf = {'a' => 1, :b => 2, 'c' => %w[ho daddy]} foo = PP.pp(asdf, '') 放富 => {"a"=>1, :b=>2, "c"=>["ho", "daddy"]}
捕获 STDOUT,它是和使用的默认通道,puts
以及print
诸如pp
搭载之类的东西,有点复杂:
require 'pp'
require 'stringio'
asdf = {'a' => 1, :b => 2, 'c' => %w[ho daddy]}
puts 'Writing to STDOUT...'
pp asdf
# remember the old STDOUT stream...
old_stdout = $stdout
# ...and create a new stream that writes to a string.
captured_stdio = StringIO.new('', 'w')
$stdout = captured_stdio
# This is all captured...
puts 'Capturing to buffer...'
pp asdf
# reset STDOUT
$stdout = old_stdout
puts 'Capturing off...'
# show what we got...
puts captured_stdio.string
以及打印的内容:
Writing to STDOUT...
{"a"=>1, :b=>2, "c"=>["ho", "daddy"]}
Capturing off...
Capturing to buffer...
{"a"=>1, :b=>2, "c"=>["ho", "daddy"]}
上面的最后两行是captured_stdio
通过替换正常$stdout
通道来存储的。写入的任何内容(将是 STDOUT)都已存储。切换回原始通道恢复正常打印,并停止将其他任何内容写入captured_stdio
.
另一种使用 stringio 的方法,无需更改 $stdout:
require 'pp'
require 'stringio'
a=["value1", "value2", "value3"]
sio = StringIO.new
PP.pp( a, sio )
puts sio.string
如果要将输出保存为字符串,可以使用stringio
这是一个例子:
#!/usr/bin/env ruby
require 'stringio'
require 'pp'
def output_to_string
sio = StringIO.new
old_stdout, $stdout = $stdout, sio
yield
$stdout = old_stdout # restore stdout
sio.string
end
result = output_to_string do
puts "hello"
pp ["value1", "value2", "value3"]
end
puts "result: #{result}"
如果您执行此代码,您将得到:
result: hello
["value1", "value2", "value3"]