如何使用awesome_print为集合之间的差异着色?

时间:2014-04-01 17:34:26

标签: ruby set awesomeprint

我正在设置差异并使用awesome_print gem打印差异:

 ap (a | b ) - (a & b)

这会打印出两个不同的项目。

有没有办法突出或着色两者之间的差异?

1 个答案:

答案 0 :(得分:0)

我不知道你怎么能做你想要达到的目标。您可能知道,Awesome Print允许您指定不同对象(数组,散列,字符串等)的颜色。令人敬畏的打印文档是here

假设您希望打印一个包含符号的集合:cat和字符串“dog”,其中设置为“blue”,:cat“purplish”和“dog”greenish。你可以这样做(如果数组的颜色应用于集合,这是有意义的):

require 'awesome_print'
require 'set'

set = [:cat, 'dog'].to_set
ap set, options={color: {array: :blue, symbol: :purpleish, string: :greenish}}

,集合将显示如下:

但是,当这两个元素属于同一个类时,您可以做的最好是单独打印它们,方法是为每个元素调用ap

set = ['cat', 'dog'].to_set
set.each_with_index { |e,i|
  ap e, options = { color: { string: i.zero? ? :greenish : :red } } }

显示:

如果您想为ab的每个元素指定特定颜色,您可能需要执行以下操作:

set.each { |e| ap e, options = { color: { string: color_map(e) } } }

其中color_map是您要编写的方法。

您可能需要先将JSON对象转换为字符串(如果它不是字符串 - 我不熟悉JSON)。