Работает над | | и && операторы

Я делал что-то, и я нахожу немного запутанным && функциональность оператора.

Когда я делаю

5 || 15
=> 5

nil || 15
=> 15

5 || nil
=> 5

Но когда я делаю это с && оператором.

5 && 15
=> 15

nil && 15
=> nil

5 && nil
=> nil

Может кто-нибудь помочь мне понять?

1 ответ

Решение

Булевы операторы в ruby ​​являются короткими замыканиями: если возможно определить значение выражения из левого аргумента, правый аргумент не оценивается.

Следовательно, более простая ментальная модель для оценки булева выражения, включающего &&, состоит в рассмотрении первых выражений, включающих только два операнда: левый операнд вычисляется первым; если значение этого операнда равно nil или false, операнд возвращается, а правый операнд не оценивается; если левый операнд - это что-то еще, правый оператор вычисляется и возвращается его значение.

Из этого определения ясно, что, как вы заметили, выражения, включающие логические операторы, не возвращают истину или ложь, а просто истинное значение или ложное значение. Стоит отметить, что это не имеет никакого значения в контексте, где логическое выражение используется только для его истинности или ложности.

Надеюсь, это поможет вам.

Другие вопросы по тегам