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 и &&.