在Ruby中着色字符串的一部分

时间:2017-07-27 13:56:21

标签: ruby colors console

我是Ruby的新手,我希望将字符串的一部分着色。为此,我写了一个类Painter

class Painter
  Red='\033[0;31m'          # Red color
  Green='\033[0;32m'        # Green color
.
.
.
  def paint(text, color)
    return "#{color}#{text}\e[0m"
  end
end

我使用它的方式是

puts "Green color looks like #{Painter.new.paint("this", Painter::Green)} and Red color looks like #{Painter.new.paint("this", Painter::Red)}"

我希望输出看起来像这样 - expected output

但是控制台上的输出看起来像 - problematic output

如果我编写像

这样的方法,我可以解决问题
def greenify(text)
  return "\033[0;32m#{text}\e[0m"
end

但这对于一个原因来说意味着太多的方法。有没有办法让我能够做到这一点?

2 个答案:

答案 0 :(得分:2)

如果您想使用现有解决方案,我建议您查看gem Colorize。您不仅可以为字符串着色,还可以使它们变粗。例如:

require 'colorize'

puts 'this is a blue string'.blue
puts "this is part #{'blue'.blue} and part #{'red'.red}"
puts "this is part #{'blue'.blue}, part #{'red'.red} and bold".bold

答案 1 :(得分:0)

这是因为你使用单引号作为颜色。像foreach($requests as $request){ echo $request->user->name; echo '<br>'; echo $request->accepted; echo '<br>'; } 这样的转义序列不是用单引号处理的,而是双引号。

Source