我正在尝试使用红宝石中的彩色宝石来实现多色文本。
基本上我想为文字设置一个基色,但要用另一种颜色突出显示特定细节,同时仍然保留所有其他文字的基色。
例如,如果我做了类似的事情:
puts "Found #{book_title.yellow} and it has #{chapters.to_s.yellow} chapters".green
我希望整个短语都是绿色的,除了书名和章节数应该是黄色的。
相反,结果是"发现"是绿色,书名是黄色,"它有"是白色(没有颜色),章节是黄色的,"章节"是白色的(没有颜色)。
在使用#{}插入数据时,只是在周围字符串中附加.green并不会在颜色更改后重新添加颜色代码。
我想将此功能构建到一个信息函数中,如下所示:
def info(message)
time_stamp = "[#{Time.new.strftime("%H:%M:%S")}]"
puts "#{time_stamp} Info: #{message}".green
end
所以当我这样称呼时:
info "Found #{book_title.yellow} and it has #{chapters.to_s.yellow} chapters"
如上所述,它将以绿色打印整个语句,并以黄色突出显示文本。
这可以在不将字符串分解为子字符串并将其连接,或指定信息函数的参数的硬编码列表(突出显示的文本的数量是动态的)的情况下实现。是否有像我在C&C的printf中那样的VA_LIST类型?
我不介意将该函数称为:
info "Found %s and it has %d chapters", book_title.yellow, chapters.to_s.yellow
或类似的东西。但我仍然需要找到一种方法来为每段文本设置颜色代码并将它们连接在一起。
希望这是有道理的。