Ruby 给您带来的小小不便。在之间?方法
如果Ruby 给您带来的小小不便。在之间?方法,ruby,Ruby,如果.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, ma
.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;
}
这背后的原因是数学上的。假设要检查某个对象是否在间隔[0,Y]内。从数学上讲,这只有在Y大于或等于0时才有意义。
之间的工作方式?
可以很容易地用
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,Y]和[Y,0]将被视为相同的(这会让数学家们感到困惑)。您需要两张支票:
n.between?(0, y)
但如果你根本不在乎数学家的感受,你可以很容易地让它独立于顺序:
y >= 0 and n.between?(0, y)
这背后的原因是数学上的。假设要检查某个对象是否在间隔[0,Y]内。从数学上讲,这只有在Y大于或等于0时才有意义。
之间的工作方式?
可以很容易地用
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,Y]和[Y,0]将被视为相同的(这会让数学家们感到困惑)。您需要两张支票:
n.between?(0, y)
但如果你根本不在乎数学家的感受,你可以很容易地让它独立于顺序:
y >= 0 and n.between?(0, y)
但是ruby甚至没有将0和y作为一个范围来读取——它在两个不同的
操作符上运行一种情况。我想我的问题有点哲学性。考虑到Ruby语言中所有令人惊讶的甜蜜语法,让between?
方法自动对两个参数值进行排序有什么缺点?我怀疑它不将其作为范围来读取的原因实际上是出于性能目的,因为在某些情况下,范围包含使用succ
。比较('a','zzzzzzzzzz')
(瞬时)与('a'..'zzzzzzzzzz')之间的'bbbbbbb'。包括吗bbbbbb’
(在我的桌面上需要几秒钟)。但是ruby甚至没有读取0和y作为一个范围-它在运行一种案例…当在两个不同的
操作符上运行时。我想我的问题有点哲学性。考虑到Ruby语言中所有令人惊讶的甜蜜语法,让between?
方法自动对两个参数值进行排序有什么缺点?我怀疑它不将其作为范围来读取的原因实际上是出于性能目的,因为在某些情况下,范围包含使用succ
。比较('a','zzzzzzzzzz')
(瞬时)与('a'..'zzzzzzzzzz')之间的'bbbbbbb'。包括吗bbbbbb'
(在我的桌面上需要几秒钟)。