Ruby:如何为数组和散列创建IRB打印结构

Ruby:如何为数组和散列创建IRB打印结构,ruby,irb,Ruby,Irb,当我在irb中创建一个新的数组/散列时,它会打印出一个很好的格式来显示结构,例如 ["value1", "value2", "value3"] {"key1" => "value1"} 。。。但当我尝试使用puts打印变量时,它们被折叠了: value1 value2 value3 key1 value1 我推测,put不是我想要的正确命令,但是什么是?我希望能够以第一种格式而不是第二种格式查看irb中的变量。您可以使用inspect方法: a=["value1", "value2",

当我在irb中创建一个新的数组/散列时,它会打印出一个很好的格式来显示结构,例如

["value1", "value2", "value3"]
{"key1" => "value1"}
。。。但当我尝试使用
puts
打印变量时,它们被折叠了:

value1
value2
value3
key1
value1

我推测,
put
不是我想要的正确命令,但是什么是?我希望能够以第一种格式而不是第二种格式查看irb中的变量。

您可以使用
inspect
方法:

a=["value1", "value2", "value3"]
puts a.inspect
或者,更好的方法是使用pp(漂亮打印)库:

试试看

>> a = ["value1", "value2", "value3"]
=> ["value1", "value2", "value3"]
>> a.inspect
=> "[\"value1\", \"value2\", \"value3\"]"
>> a = {"key1" => "value1"}
=> {"key1"=>"value1"}
>> a.inspect
=> "{\"key1\"=>\"value1\"}"
也可以使用p()方法打印它们:

>> p a
{"key1"=>"value1"}

您可以做的另一件事是使用
y
方法将输入转换为Yaml。这产生了非常好的输出

>> data = { 'dog' => 'Flemeale', 'horse' => 'Gregoire', 'cow' => 'Fleante' }
=> {"cow"=>"Fleante", "horse"=>"Gregoire", "dog"=>"Flemeale"}
>> y data
--- 
cow: Fleante
horse: Gregoire
dog: Flemeale

我个人选择的工具是“漂亮的打印”和
pp
方法

require 'pp' # <- 'Pretty Print' Included in ruby standard library
pp({ :hello => :world, :this => ['is', 'an', 'array'] })
=> {:hello=>:world, :this=>["is", "an", "array"]} 
require'pp'#:world,:this=>['is','an','array']})
=>{:hello=>:world,:this=>[“是”、“一个”、“数组”]}

漂亮的印花效果很好,但宝石更棒!您必须
要求使用awesome_print
,但它可以漂亮地处理嵌套的散列和数组,并在终端中使用“ap”而不是“p”对其进行着色以输出

您还可以将其包含在~/.irbrc中,将其作为显示对象的默认方法:

require "awesome_print"
AwesomePrint.irb!

不错的一个,在1.9及更高版本中不知道(我只是喜欢YAML),而不是
y
方法,应该使用
YAML.dump
。Per[:
y
被污染的内核,并且Per[,
Kernel.y
是私有的。
pp
如果对象太大,可以为您购买缩进。我喜欢这个,好看的哈希!
require "awesome_print"
AwesomePrint.irb!