Ruby:如何为Arrays和Hashes制作IRB打印结构

nee*_*zer 67 ruby irb

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

["value1", "value2", "value3"]
{"key1" => "value1"}
Run Code Online (Sandbox Code Playgroud)

...但是当我尝试使用打印出我的变量时puts,我会让它们崩溃:

value1
value2
value3
key1
value1
Run Code Online (Sandbox Code Playgroud)

我认为这puts不是我想要的正确命令,但是什么呢?我希望能够以第一种格式在irb中查看我的变量,而不是第二种格式.

dmo*_*ark 116

您可以使用以下inspect方法:

a=["value1", "value2", "value3"]
puts a.inspect
Run Code Online (Sandbox Code Playgroud)

或者,更好的是,使用pp(漂亮的打印)lib:

require 'pp'
a=["value1", "value2", "value3"]
pp a
Run Code Online (Sandbox Code Playgroud)

  • 如果对象太大,`pp`会给你缩进. (6认同)

Eth*_*han 54

您可以做的另一件事是使用y将输入转换为Yaml 的方法.这产生了相当不错的输出......

>> data = { 'dog' => 'Flemeale', 'horse' => 'Gregoire', 'cow' => 'Fleante' }
=> {"cow"=>"Fleante", "horse"=>"Gregoire", "dog"=>"Flemeale"}
>> y data
--- 
cow: Fleante
horse: Gregoire
dog: Flemeale
Run Code Online (Sandbox Code Playgroud)

  • 当然,你必须要求yaml`来获取方法. (12认同)
  • 对于 1.9 及更高版本,您应该使用“YAML.dump”而不是“y”方法。根据 [https://github.com/tenderlove/psych/issues/50]:`y` 污染的内核,以及根据 [https://www.ruby-forum.com/topic/2332227],`Kernel.y`是私人的。 (2认同)

Chr*_*ris 13

漂亮的印刷效果很好,但Awesome_Print宝石更好!您将不得不这样做,require awesome_print但它会 精美地处理嵌套的哈希和数组,并使用'ap'代替'p'在终端中为它们添加颜色以放置输出.

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

require "awesome_print"
AwesomePrint.irb!
Run Code Online (Sandbox Code Playgroud)


Gde*_*lin 5

尝试.inspect

>> a = ["value1", "value2", "value3"]
=> ["value1", "value2", "value3"]
>> a.inspect
=> "[\"value1\", \"value2\", \"value3\"]"
>> a = {"key1" => "value1"}
=> {"key1"=>"value1"}
>> a.inspect
=> "{\"key1\"=>\"value1\"}"
Run Code Online (Sandbox Code Playgroud)

您也可以使用p()方法来打印它们:

>> p a
{"key1"=>"value1"}
Run Code Online (Sandbox Code Playgroud)