I = true и false в Ruby - правда?
Я принципиально неправильно понимаю Ruby здесь? Я пишу код Ruby уже около 2 лет и только сегодня наткнулся на это...
ruby-1.8.7-p249 > i = true and false
=> false
ruby-1.8.7-p249 > i
=> true
Может кто-нибудь объяснить, что здесь происходит, пожалуйста? Я уверен, что это спецификация, но это просто кажется мне интуитивным...
Ответы
Ответ 1
Операторы &&
и and
имеют разный приоритет, а =
находится между ними.
irb(main):006:0> i = true and false
=> false
irb(main):007:0> i
=> true
irb(main):008:0> i = true && false
=> false
irb(main):009:0> i
=> false
irb(main):010:0>
Первый читается как (i = true) and false
, второй - как i = (true && false)
.
Ответ 2
and
имеет более низкий приоритет, чем =
, поэтому i = true and false
анализируется как (i = true) and false
.
Итак, значение true
присваивается i
, а затем возвращаемое значение этой операции (которое истинно) равно and
ed с ложным значением, что приводит к тому, что все выражение оценивается как false,
, хотя i
все еще имеет значение true
.
Ответ 3
Ваша строка анализируется как
i = true and false
(i = true) and false
true and false
И, конечно, из-за i = true
, i
будет true
впоследствии.
Ответ 4
Как я понимаю ваш код, он интерпретируется как:
- Назначить true для i
- Вернуть я и false
Результаты кажутся правильными.
Ответ 5
Как выяснили другие, ключевое слово and
используется, если вы хотите поместить два разных оператора в одну строку. Это всего лишь лучший способ сделать ваш код доступным для чтения.
Таким образом,
i = true and false
означает
i = true; false
#(a less widely used code layout in ruby)
или это самый простой способ:
i = true
false
Итак, вывод правильный. В противном случае, если вы ожидали false
, используйте boolean и &&
.