【问题标题】:How to vertically align stdout text in Ruby (like Rails)如何在 Ruby 中垂直对齐标准输出文本(如 Rails)
【发布时间】:2015-09-07 21:59:29
【问题描述】:

我正在尝试创建一个 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。我正在使用 Thor,这很重要。

谢谢

【问题讨论】:

  • 可能与this重复

标签: ruby-on-rails ruby stdout thor


【解决方案1】:

在您的情况下,您可以使用可敬的 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

【讨论】:

    【解决方案2】:

    我认为你想多了。他们只是打印出中间有间距的文本行。

    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
    

    【讨论】:

      猜你喜欢
      • 2011-06-22
      • 2014-11-03
      • 2016-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-16
      相关资源
      最近更新 更多