由于某些原因,我在unicode字符的范围比较中收到了意想不到的结果。将unicode字符与unicode字符范围进行比较时出现异常行为
总之,在我最小的测试代码,("\u1000".."\u1200") === "\u1100"
是false
,在那里我会想到它是true
- 而对"\u1001"
相同的测试是true
预期。我觉得这完全是不可理解的。 <
运营商的结果也很有趣 - 它们与===
相抵触。
下面的代码是一个很好的例证最小:
# encoding: utf-8
require 'pp'
a = "\u1000"
b = "\u1200"
r = (a..b)
x = "\u1001"
y = "\u1100"
pp a, b, r, x, y
puts "a < x = #{a < x}"
puts "b > x = #{b > x}"
puts "a < y = #{a < y}"
puts "b > y = #{b > y}"
puts "r === x = #{r === x}"
puts "r === y = #{r === y}"
我天真地期望,无论是===
操作会产生“真”在这里。然而,运行这个程序的实际输出是:
ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.3.0]
"\u1000"
"\u1200"
"\u1000".."\u1200"
"\u1001"
"\u1100"
a < x = true
b > x = true
a < y = true
b > y = true
r === x = true
r === y = false
有人能够启发我吗?
(请注意我在1.9.3上的Mac OS X,而且我明确地设置编码设置为UTF-8)。
(a..b)是什么意思? – 2012-04-04 23:43:51
@KitHo'(a..b)'产生一个[Range](http://www.ruby-doc.org/core-1.9.3/Range.html)对象,它具有最小值'a'和最大值的'b'并且可以列举或包含在内。 – dbenhur 2012-04-04 23:50:15