使用 `p` 方法转义出现在数组中的字符,无需插值

Escape characters appearing in an array with the `p` method without interpolation

对于下面的 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 方法如何显示带有 stack 而不是 overflow 的转义字符?为什么只有插值时才会出现这种情况,而不是在没有插值的情况下打印?

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 正在使用的方法:

Returns a printable version of str, surrounded by quote marks, with special characters escaped.