关注【索引目录】服务号,更多精彩内容等你来探索!
如果你曾经盯着一堆控制台输出,疑惑自己刚刚打印了什么,那么你并不孤单。Ruby 提供了多种打印方式,但知道何时使用哪一种才是真正的诀窍。在本文中,我们将介绍 Ruby 中五种最常见的打印方式,以及一个让你的控制台看起来像是焕发光彩的 gem。
puts:带有自动换行符的标准输出
puts是将简单输出转储到控制台的首选。它代表“put string”,并在每个参数末尾添加一个换行符。它听起来很友好,也很低调:
puts "Hello, World!"
puts 123
puts ["Ruby", "Rails"]
输出:
Hello, World!
123
Ruby
Rails
数组是逐行打印的,因此当每个项目出现在其自己的行上时不要感到惊讶。
print:不带换行符的连续输出
想要在同一行打印多个内容?使用print。它类似于puts,但没有自动换行符:
print "Hello, "
print "World!"
输出:
Hello, World!
如果您想要换行符,则必须手动添加:
print "Hello, World!\n"
p:使用检查输出进行调试
p是 的调试兄弟puts。它显示inspect对象的版本,意味着字符串保留其引号,并且您可以获得更多详细信息:
p "Hello, World!"
p [1, 2, 3]
p({name: "Rob", age: 39})
输出:
"Hello, World!"
[1, 2, 3]
{:name=>"Rob", :age=>39}
如果您正在调试并希望对正在处理的内容有清晰的了解,p那么它就是您的朋友。
pp:精美印刷,增强可读性
对于更复杂的东西,比如嵌套哈希,pp(漂亮的打印)使事情变得可读:
require 'pp'
complex_hash = {name: "Rob", hobbies: ["coding", "fitness", {sports: ["cycling", "lifting"]}]}
pp complex_hash
输出:
{:name=>"Rob",
:hobbies=>["coding", "fitness", {:sports=>["cycling", "lifting"]}]}
可以把它想象成p,但具有空间意识。
y:IRB 中的 YAML 输出
该y方法仅在 IRB(交互式 Ruby)中可用,但它是一种无需太多努力就能输出 YAML 格式数据的好方法:
# In IRB
data = {name: "Rob", languages: ["Ruby", "JavaScript"]}
y data
输出:
---
:name: Rob
:languages:
- Ruby
- JavaScript
当你处理嵌套内容时,它整洁、结构化且更具可读性。
快速摘要
| 方法 | 何时使用 |
|---|---|
| puts | 通用输出,自动换行 |
| 连续输出,无换行 | |
| p | 使用检查细节进行调试 |
| pp | 美观的打印以提高可读性 |
| y | YAML 格式的输出(仅限 IRB) |
如果你只是想要一些快速易读puts且p能让你受益匪浅的东西。但是,如果你正在使用 API 中的嵌套哈希值,并且不想因为阅读原始转储而眼花缭乱,那么请继续阅读。
awesome_print:增强的精美打印风格
如果pp能完成工作,那就用 flairawesome_print来完成吧。它能以全彩漂亮地打印 Ruby 对象,并进行漂亮的缩进,让你的控制台输出感觉就像 VS Code 决定加入进来一样。
安装
使用Bundler:
group :development do
gem 'awesome_print'
end
然后运行:
bundle install
或者直接安装:
gem install awesome_print
用法
require 'awesome_print'
data = {
name: "Rob",
hobbies: ["coding", "fitness", { sports: ["cycling", "lifting"] }]
}
ap data
输出:
{
:name => "Rob",
:hobbies => [
[0] "coding",
[1] "fitness",
[2] {
:sports => [
[0] "cycling",
[1] "lifting"
]
}
]
}
要使其成为 IRB 中的默认设置:
require 'awesome_print'
AwesomePrint.irb!
一旦您使用了awesome_print,返回到puts感觉就像阅读没有换行符的最小化 JSON。

