出于某种原因,我在 unicode 字符的范围比较中得到了意想不到的结果。
总而言之,在我最小化的测试代码中,("\u1000".."\u1200") === "\u1100"
is 是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
有人可以启发我吗?
(注意我在 Mac OS X 上使用 1.9.3,并且我明确地将编码设置为 utf-8。)