Экранирующие символы, появляющиеся в массиве с помощью метода `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, заключенную в кавычки, с экранированными специальными символами.