я = истина и ложь в Ruby это правда? - PullRequest
13 голосов
/ 10 мая 2010

Я в корне не понимаю Руби?Я пишу код Ruby уже около 2 лет и только сегодня наткнулся на это ...

ruby-1.8.7-p249 > i = true and false
 => false 
ruby-1.8.7-p249 > i
 => true 

Может кто-нибудь объяснить, что здесь происходит, пожалуйста?Я уверен, что это спецификация, но мне это кажется нелогичным ...

Ответы [ 5 ]

30 голосов
/ 10 мая 2010

Операторы && и 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).

13 голосов
/ 10 мая 2010

and имеет более низкий приоритет, чем =, поэтому i = true and false анализируется как (i = true) and false.

Таким образом, значение true присваивается i, а затем возвращаемое значение этой операции (которое является истинным) and ed со значением false, что приводит к тому, что все выражение оценивается в false,, даже если i все еще имеет значение true.

3 голосов
/ 10 мая 2010

Как я понимаю ваш код, он интерпретируется как:

  • Назначьте true для i
  • Вернуть i и false

Результаты кажутся правильными.

3 голосов
/ 10 мая 2010

Ваша строка анализируется как

i = true and false
(i = true) and false
true and false

И, конечно, из-за i = true, i будет true впоследствии.

1 голос
/ 10 мая 2010

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

Таким образом,

 i = true and false 
подразумевает

<code>i = true; false</code> #(a less widely used code layout in ruby)

или какой самый простой способ:

 
 i = true
 false 

Итак, вывод правильный. В противном случае, если вы ожидаете false, используйте boolean и &&.

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