大于或等于(基于布尔条件)

Greater than OR equal (based on boolean condition)

什么是大于或等于的简单构造,其中相等部分仅基于布尔参数应用。

一种直接的方法(类型(Java)脚本):

function isGreaterThanOrEqual(a: number, b:number, allowEqual: boolean = false): boolean {
  if(allowEqual){
    return a >= b;
  } else {
    return a > b
  }
}

我有一个(旋转的)矩形碰撞检测方法,其中进行了许多这样的比较。有时我想包括相互接触的矩形,有时又不想(它们必须 "really" 重叠),这就是为什么这个可选的 allowEqual 参数派上用场的原因。

我不想在这个方法的很多地方使用这个 if 语句,我更喜欢优雅的单行代码。

这可以用任何方式在一行中完成吗?

您可以通过返回较大检查或检查 allowEqual 的值和身份检查来使用分阶段方法。

return a > b || allowEqual && a === b;
return (a - b) >= (+(!allowEqual)) * Number.EPSILON;

解释:

如果 allowEqualtrue,它的否定被强制转换为 0,所以 a - b 必须至少是 0。如果 allowEqual 为假,其否定被强制为 1,因此 a - b 必须至少是两个数字之间可能的最小距离。