。之间的轻微不便?方法

时间:2014-11-01 21:41:59

标签: ruby

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;
}

1 个答案:

答案 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)