n = 4
n.between?(3,5) # => true
n.between?(5,3) # => false
Не было бы более удобно, если бы метод .between?
возвратил true
в третьей строке? Если нет, почему бы и нет?Незначительные неудобства .between? метод
EDIT для осветления
Вот исходный код (простите, но 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 и y в качестве диапазона - он запускает своего рода «случай ... когда» на двух разных операторах «<=>». Думаю, мой вопрос несколько философский. Учитывая весь удивительно сладкий синтаксический сахар на языке Ruby, было бы недостатком использования метода «между?» Автоматически сортировать два значения параметра? – pgblu
Я подозреваю причину, по которой он не читает его, поскольку диапазон действительно для целей производительности, поскольку в некоторых случаях включение диапазона использует 'succ'. Сравните ''bbbbbb..between? (' A ',' zzzzzzzzzzzz ')' (мгновенный) с '(' a '..' zzzzzzzzzzzz '). Include? 'bbbbbb'' (занимает несколько секунд на моем рабочем столе). – Max