Ruby:如何使IRB打印数组和哈希结构

72

irb 中创建一个新的数组/哈希表时,它会以漂亮的格式打印出来以显示其结构,例如:

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

... 但是当我尝试使用puts打印我的变量时,它们被折叠在一起:

value1
value2
value3
key1
value1

我了解到puts不是我想要的正确命令,但是应该用哪个命令呢?我想在irb中以第一种格式查看我的变量,而不是第二种。

5个回答

122

您可以使用inspect方法:

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

或者更好的方法是使用pp(漂亮打印)库:

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

6
如果对象过大,使用 pp 可以帮助你进行缩进。 - taw

61

还有一件事情可以做,就是使用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
2
对于1.9及更高版本,您应该使用YAML.dump而不是y方法。根据[https://github.com/tenderlove/psych/issues/50]:`y`污染了Kernel,并且根据[https://www.ruby-forum.com/topic/2332227],`Kernel.y`是私有的。 - aenw

16

漂亮的打印效果很好用,但Awesome_Print宝石更好!你需要require awesome_print,但它能够优美地处理嵌套的哈希和数组,并在终端上使用“ap”而不是“p”输出它们并进行着色。

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

require "awesome_print"
AwesomePrint.irb!

我喜欢这个,哈希表看起来很不错! - Adam Marshall

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

2

在这方面,我个人的首选工具是“Pretty Print”和pp方法。

require 'pp' # <- 'Pretty Print' Included in ruby standard library
pp({ :hello => :world, :this => ['is', 'an', 'array'] })
=> {:hello=>:world, :this=>["is", "an", "array"]} 

它根本无法格式化更复杂的哈希值。 - Hackeron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接