Ruby:如何为数组和哈希创建IRB打印结构


69

当我在irb中创建一个新的数组/哈希时,它会打印出一种不错的格式来显示结构,例如。

["value1", "value2", "value3"]
{"key1" => "value1"}

...但是当我尝试使用来打印变量时puts,我将它们折叠了:

value1
value2
value3
key1
value1

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

Answers:


120

您可以使用以下inspect方法:

a=["value1", "value2", "value3"]
puts a.inspect

或者,甚至更好的是,使用pp(精美打印)库:

require 'pp'
a=["value1", "value2", "value3"]
pp a

6
pp如果对象太大,可以购买缩进。
TAW

58

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

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

1
好人,不知道(我只是喜欢YAML)
Yoann Le Touche,2009年

2
对于1.9及更高版本,y应使用代替方法YAML.dump。每[ github.com/tenderlove/psych/issues/50] y污染内核,每[ ruby-forum.com/topic/2332227] Kernel.y是私人的。
aenw 2013年

14

漂亮的印刷品效果很好,但Awesome_Print宝石甚至更好!您必须这样做, require awesome_print但是它可以精美地处理嵌套的哈希和数组,并在终端中使用“ ap”(而不是“ p”)为输出着色,从而为它们着色。

您也可以将它包含在〜/ .irbrc中,以使其成为显示对象的默认方法:

require "awesome_print"
AwesomePrint.irb!

我喜欢这个,看起来很漂亮的哈希!
亚当·马歇尔

6

尝试.inspect

>> 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"}

3

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

require 'pp' # <- 'Pretty Print' Included in ruby standard library
pp({ :hello => :world, :this => ['is', 'an', 'array'] })
=> {:hello=>:world, :this=>["is", "an", "array"]} 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.