了解 Ruby 何时将字符串更改为 Unicode 表示形式



我想知道为什么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 的统一字符串。

最新更新