如何垂直对齐 Ruby 中的标准输出文本(如 Rails)
How to vertically align stdout text in Ruby (like Rails)
我正在尝试创建一个 CLI 应用程序,我想将文本输出到控制台。我不知道如何格式化我想要的格式。
当您键入 rails new app
时,您会得到以下输出:
create tmp/cache
create tmp/cache/assets
create vendor/assets/javascripts
create vendor/assets/javascripts/.keep
create vendor/assets/stylesheets
create vendor/assets/stylesheets/.keep
run bundle install
如何编写输出以确保所有命令都像那样垂直对齐?
PS。我正在使用雷神,这很重要。
谢谢
我认为你想多了。他们只是打印出文本行之间有间距。
puts " create tmp/cache"
puts " create tmp/cache/assets"
# ...
将以完全相同的方式输出。
Ruby 中有一个函数可以稍微帮助解决这个问题 (String#rjust
),它会在字符串的左侧填充空格。因此,如果您希望第一列的宽度为 10 个字符,则可以 rjust
值为 10 的字符串,它会将它们右对齐。例如,如果您要遍历哈希,您可能 运行 以下代码:
hash = { "hello" => "world", "foo" => "bar" }
hash.each do |key, value|
puts "#{key.rjust(7)} #{value}"
end
# hello world
# foo bar
您可以根据自己的情况使用古老的 sprintf
。有一个 number of stylistic and utilitarian reasons why,但通常它会使代码更简洁。您还可以以编程方式指定所需的填充。在您的具体示例中:
output = {create: 'something.rb',
identical: 'something_else.rb',}
output.each do |key, value|
puts sprintf '%10s %3s', key.to_s, value
end
给你
create something.rb
identical something_else.rb
我正在尝试创建一个 CLI 应用程序,我想将文本输出到控制台。我不知道如何格式化我想要的格式。
当您键入 rails new app
时,您会得到以下输出:
create tmp/cache
create tmp/cache/assets
create vendor/assets/javascripts
create vendor/assets/javascripts/.keep
create vendor/assets/stylesheets
create vendor/assets/stylesheets/.keep
run bundle install
如何编写输出以确保所有命令都像那样垂直对齐?
PS。我正在使用雷神,这很重要。
谢谢
我认为你想多了。他们只是打印出文本行之间有间距。
puts " create tmp/cache"
puts " create tmp/cache/assets"
# ...
将以完全相同的方式输出。
Ruby 中有一个函数可以稍微帮助解决这个问题 (String#rjust
),它会在字符串的左侧填充空格。因此,如果您希望第一列的宽度为 10 个字符,则可以 rjust
值为 10 的字符串,它会将它们右对齐。例如,如果您要遍历哈希,您可能 运行 以下代码:
hash = { "hello" => "world", "foo" => "bar" }
hash.each do |key, value|
puts "#{key.rjust(7)} #{value}"
end
# hello world
# foo bar
您可以根据自己的情况使用古老的 sprintf
。有一个 number of stylistic and utilitarian reasons why,但通常它会使代码更简洁。您还可以以编程方式指定所需的填充。在您的具体示例中:
output = {create: 'something.rb',
identical: 'something_else.rb',}
output.each do |key, value|
puts sprintf '%10s %3s', key.to_s, value
end
给你
create something.rb
identical something_else.rb