Строгое сравнение значений (меньше / больше чем) - PullRequest
3 голосов
/ 17 февраля 2012

Я почти уверен, что следующее ведет себя неправильно (по крайней мере, на мой взгляд) из-за некоторого безумия правдивости:

var x = 5;
0 < x < 10 // True, and returns true.
0 < x < 2 // False, and returns true.
0 < x < 0 // False, and returns false.

Как я понимаю, (0 <5) оцениваетв true, и (true <2) также оценивается как true (т. е. 1 <2).Я проверил это с третьим утверждением, которое, кажется, подтверждает мою теорию.Теперь к вопросу: есть ли способ заставить это «работать» без большого количества дополнительного кода?</p>

Ответы [ 3 ]

10 голосов
/ 17 февраля 2012

"... есть ли способ заставить это работать без большого количества дополнительного кода?"

Конечно, используйте && ...

(0 < x) && (x < 10)

Вы можете опустить скобки, если хотите.

1 голос
/ 17 февраля 2012

Проблема связана с тем, что <является двоичным оператором. </p>

Это означает, что один из <оценивается одновременно, а не оба. </p>

Что означает, что независимо от порядка, в котором они оцениваются (который, IIRC - от L до R), одно из сравнений будет неправильным.

Потому что это КОД.

НЕ АЛГЕБРА.

В противном случае, умное использование оператора &&, как описано в других ответах, быстро решит вашу проблему.

1 голос
/ 17 февраля 2012

Как вы заметили, большинство языков программирования не реализуют "между", как вы написали бы это математически.Вместо этого разделите сравнения на два, где каждый раз сравниваются только два элемента.

var x = 5;
0 < x && x < 10
0 < x && x < 2
0 < x && x < 2

Итак, первая строка гласит: «ноль меньше х, а х меньше десяти».Если вы не уверены, в каком порядке выражение будет оцениваться, будет работать как группировка.

(0 < x) && (x < 10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...