Какая разница между "and" и "&&"?
В первую очередь, приоритет. Как в естественном языке "&&" (или &) имеет больший приоритет, чем "and". В частности, "and" имеет более низкий
приоритет, чем "=". Некоторые попадаются в ловушку в следующем примере:
have_both = a and b
что эквивалентно
(have_both = a) and b
Вместо этого следует использовать один из следующих вариантов:
have_both = a && b
have_both = (a and b)
if a and b
# ...
end
Вкратце, "&&" is good for chaining values conditionally; "and" is good for chaining statements conditionally. Результат "and" выражения не следует использовать где-то кроме булевского выражения.
Следующий код предотвращает ошибку, если arr - это nil:
result = arr && arr.size
Следующий пример - это короткий вариант записи if ... then ... else .... :
action() and
LOG.info "Performed action" or
LOG.info "Failed to perform action"
Начинающего все это может смутить, но если думать об этом, как о естественном языке, можно быстро привыкнуть. Все вышесказанное относится и к "or" и к "||" (вдобавок к отдельному вопросу на эту тему). Приоритет "&&" выше, чем у "||". У "and" и "or" одинаковый приоритет.
