我想知道为什么Ruby在下面的场景中以不同的方式表示我的返回值。我正在向函数发送一个方程列表并立即按原样返回。如果直接打印,≡显示为其 Unicode 序列。如果我索引到结果中,它会再次显示为≡。我在测试 Unicode 序列是否等效于 ≡ 时true
,所以我不担心值会改变。我只想知道为什么它的打印方式与屏幕不同。
def Explain(equations)
equations
end
equations = ["x≡3(mod4)", "x≡4(mod5)"]
puts "ORIGINAL LIST"
equations.each { |e| puts e }
puts "nnRETURNED AS A LIST"
puts Explain(equations).to_s
puts "nnRETURNED AND ACCESSED INDIVIDUALLY"
puts Explain(equations)[0]
puts Explain(equations)[1]
输出:
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]
ORIGINAL LIST
x≡3(mod4)
x≡4(mod5)
RETURNED AS A LIST
["xu22613(mod4)", "xu22614(mod5)"]
RETURNED AND ACCESSED INDIVIDUALLY
x≡3(mod4)
x≡4(mod5)
它不是"更改为Unicode表示",而是更改为inspect
表示。puts
调用给定参数to_s
以呈现它们,默认情况下,Array 仅以其"原始"形式显示。
打印单个元素会产生所需的行为,因为这是一个简单的字符串。打印数组本身是有问题的,因为数组将使用.inspect
显示。
试试这个:
puts equations.join(' ')
将它们与空间相结合的地方,一切看起来都很好。
注意:当字符串被"检查"时,当字符串中出现任何非 ASCII 字符时,将使用u...
表示法。n
等也是如此。
当您在数组上调用to_s时,正在发生转换。它将数组中的每个值转换为基于 ASCII 的统一字符串。