大于或等于(基于布尔条件)
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;
解释:
如果 allowEqual
是 true
,它的否定被强制转换为 0
,所以 a - b
必须至少是 0
。如果 allowEqual
为假,其否定被强制为 1
,因此 a - b
必须至少是两个数字之间可能的最小距离。
什么是大于或等于的简单构造,其中相等部分仅基于布尔参数应用。
一种直接的方法(类型(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;
解释:
如果 allowEqual
是 true
,它的否定被强制转换为 0
,所以 a - b
必须至少是 0
。如果 allowEqual
为假,其否定被强制为 1
,因此 a - b
必须至少是两个数字之间可能的最小距离。