使用 `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.
对于下面的 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.