Smalltalk中是否有检查两个TimeSpan相交的内置函数?
Smalltalk中TimeSpan相交检查的内置函数及代码优化
一、是否存在内置函数?
目前主流Smalltalk方言(如Pharo、Squeak、VisualWorks)的标准库中,没有直接提供接收两个TimeSpan实例并检查是否相交的内置函数,需要自定义实现,但可以用更简洁的逻辑替代你当前的代码。
二、简化后的实现
你的代码逻辑是正确的,但可以通过反向判断不相交场景大幅简化:两个时间段不相交的唯一可能是其中一个完全处于另一个的时间范围之前(即A的结束早于B的开始,或B的结束早于A的开始),相交的结果就是对这个条件取反。该逻辑自动包含端点相等的判定(和你原代码规则一致)。
简化后的代码:
checkIntersection: aTimespan "返回两个时间段是否相交(包含端点相等的情况)" ^ (self end >= aTimespan start) and: [aTimespan end >= self start]
逻辑说明
这个实现和你原代码的判定结果完全一致,但可读性与简洁性更优:
- 当任意端点相等时,两个比较条件都会成立,返回true;
- 当时间段部分重叠时,两个条件同时成立,返回true;
- 仅当两个时间段完全不重叠时,其中一个条件不成立,返回false。
内容的提问来源于stack exchange,提问作者magnolia93
相关产品推荐
相关产品推荐

