n = 4
n.between?(3,5) # => true
n.between?(5,3) # => false
如果.between?
方法在第三行返回true
,会不会更方便?如果没有,为什么不呢?
编辑以澄清
这是源代码(原谅我,但C不是我的母语)
static VALUE
cmp_between(VALUE x, VALUE min, VALUE max)
{
if (RTEST(cmp_lt(x, min))) return Qfalse;
if (RTEST(cmp_gt(x, max))) return Qfalse;
return Qtrue;
}
如果将此更改为
,那么会产生哪些负面影响(除了它可能会破坏许多现存的遗留代码) static VALUE
cmp_between(VALUE x, VALUE y, VALUE z)
{
if (RTEST(cmp_lt(y, z))) {
y = min;
z = max; }
else {
z = min;
y = max; }
if (RTEST(cmp_lt(x, min))) return Qfalse;
if (RTEST(cmp_gt(x, max))) return Qfalse;
return Qtrue;
}
答案 0 :(得分:4)
这背后的原因是数学。假设您要检查某个区域是否在[0,Y]区间。在数学上,这只有在Y大于或等于0时才有意义。between?
的工作方式,您可以使用
n.between?(0, y)
如果按照你描述的方式工作,那么间隔[0,Y]和[Y,0]将被视为相同(这会使数学家感到困惑)。你需要两张支票:
y >= 0 and n.between?(0, y)
但如果你根本不关心数学家的感受,你可以很容易地使它与秩序无关:
n.between?(*[x,y].sort)