Ruby 字符串 Range 中 <=> 比较操作符的疑惑

Unknow user · December 05, 2012 · Last by luikore replied at December 05, 2012 · 2473 hits

疑惑的代码:

tripless = "AAA".."ZZZ" tripless.include? “ABCD” // true in 1.8, false in 1.9 tripless.cover? "ABCD" // ture and fast in 1.9

补充说明:书上介绍 cover? 总是使用连续的成员关系测试,而 include? 和 member 会根据 Range 类型选择使用连续还是离散的成员关系测试。另外,在 Range 里面使用连续的成员关系测试,通过实现 <=> 操作符。

为什么 ABCD 用连续的成员关系测试,"ABCD" 会是“AAA” ... “ZZZ”范围中的端点。比较操作符在对字符串进行 <=> 操作,是什么样的方式呢?使用字节码点数值还是什么呢?

include? 是通过循环遍历元素实现的 cover? 是用比较上下限的方式实现的 1.8 中 include? 应该就和 1.9 的 cover? 一样

字符串比较是字典序,例如 "apple" 就是在 "a" 在 "b" 之间

You need to Sign in before reply, if you don't have an account, please Sign up first.