Как мне покрасить различия между наборами с помощью awesome_print?
Я делаю разницу между наборами и печатаю разницу, используя гем awesome_print:
ap (a | b ) - (a & b)
Это распечатывает два элемента, которые отличаются.
Есть ли способ выделить или покрасить разницу между ними?
1 ответ
Я не понимаю, как вы можете сделать то, что вы хотите достичь. Как вы, возможно, знаете, Awesome Print позволяет указывать цвета различных объектов (массивов, хэшей, строк и т. Д.). Awesome Print документы здесь.
Предположим, вы хотите напечатать набор, содержащий символ:cat и строку "dog", с набором "blue",:cat "purplish" и "dog" зеленоватого цвета. Вы можете сделать это следующим образом (кажется, что цвет для массивов применяется к наборам, что имеет смысл):
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 } } }
который отображает:
Если вы хотите назначить определенный цвет каждому элементу a
а также b
Вы можете сделать что-то вроде этого:
set.each { |e| ap e, options = { color: { string: color_map(e) } } }
где color_map
это метод, который вы бы написали.
Возможно, вам придется сначала преобразовать JSON
объект в строку (если это еще не строка - я не знаком с JSON
).