Как мне покрасить различия между наборами с помощью 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).

Другие вопросы по тегам