Это рубин идиома для ноль это правда? - PullRequest
2 голосов
/ 08 ноября 2019

Привет, я хочу иметь условие, которое, когда оно равно nil, имеет значение true или вызывает метод проверки и возвращает true / false. Например:

(apple.nil? || apple.sweet?) && (pear.nil? || pear.sweet?)

Проверяет, все ли фрукты сладкие (здесь только яблоко и груша). Есть ли рубиновая идиома, упрощающая этот код?

Cheers

Ответы [ 2 ]

6 голосов
/ 08 ноября 2019

если все фрукты сладкие

[apple, pear].compact.all?(&:sweet?)

compact избавляется от nil элементов, тогда all?(&:sweet?) проверяет, все ли сладкие остаются.

4 голосов
/ 08 ноября 2019

Альтернатива решению, данному Амаданом:

fruits.all? { |f| f.nil? || f.sweet? }

Хотя идея использования compact, как правильно сказал Амадан, хороша и лаконична, она, вероятно, создаст временный массив не-nil элементам, хотя для простого использования all? такой массив не нужен, итерация останавливается, как только встречается элемент, который не удовлетворяет условию.

Конечно, если у вас есть только два плода вваш код, который упоминается прямо, я бы посчитал ваш код лучше понять, чем делать

[apple,pear].all? {...}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...