3
我有紅寶石2.0.0p195(2013年5月14日修訂版40734)[x86_64的Linux的] 當我運行下面的代碼:String class'next!的奇怪行爲!上Unicode字符串方法
char = "\u00D7"
(1..10).each {
puts char.bytes.collect { |b| b.ord }.inspect
puts char
char.next!
}
我得到以下輸出:
[195, 151]
×
[195, 152]
Ø
[195, 153]
Ù
[195, 154]
Ú
[195, 155]
Û
[195, 156]
Ü
[195, 157]
Ý
[195, 158]
Þ
[195, 159]
ß
[195, 160]
à
但是,當我初始化字符來代替\u00D6
,如下:
char = "\u00D6"
(1..10).each {
puts char.bytes.collect { |b| b.ord }.inspect
puts char
char.next!
}
我得到如下:
[195, 150]
Ö
[195, 128, 195, 128]
ÀÀ
[195, 128, 195, 129]
ÀÁ
[195, 128, 195, 130]
ÀÂ
[195, 128, 195, 131]
ÀÃ
[195, 128, 195, 132]
ÀÄ
[195, 128, 195, 133]
ÀÅ
[195, 128, 195, 134]
ÀÆ
[195, 128, 195, 135]
ÀÇ
[195, 128, 195, 136]
ÀÈ
爲什麼每種情況下的行爲如此不同?
Unicode排序規則是複雜的東西,而string#succ自己做了一些複雜的東西(例如'z'.succ#=>「aa」)。兩者都不是簡單的,只要將1加到代碼點 –