Экранирующие символы, появляющиеся в массиве с помощью метода `p` без интерполяции

За overflow ниже кавычки окружают массив.

overflow = [5,6,7]
p overflow       #=> [5, 6, 7]
p "#{overflow}"  #=> "[5, 6, 7]"

За stack ниже результаты странные для интерполированного выражения.

stack = 1234.to_s.chars.reverse.each_slice(3).map { |s| s.reverse.join }.reverse
p stack          #=> ["1", "234"]
p "#{stack}"     #=> "[\"1\", \"234\"]"

Как работает p метод показать escape-символы с stack, но не с overflow? Почему это происходит только при интерполяции, а не при печати без интерполяции?

1 ответ

Решение

overflow массив целых чисел в то время как stack это массив строк. Там нет ничего, чтобы убежать в overflow,

Возможно, вы хотели сделать stack массив Fxinum а также, в этом случае добавить .map(&:to_i) в конце цепочки методов:

stack = 1234.to_s.chars.reverse.each_slice(3).map { |s| s.reverse.join }.reverse.map(&:to_i)

На второй вопрос, вот как метод p работает. Чтобы быть точным, поведение определяется в String#inspectкак это метод p использует:

Возвращает версию для печати str, заключенную в кавычки, с экранированными специальными символами.

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