嗨,我想要一个条件,当它为nil时,它为true,或者它调用check方法并返回true / false。例如:
(apple.nil? || apple.sweet?) && (pear.nil? || pear.sweet?)
它检查所有水果是否都甜(这里只有苹果和梨)。是否有任何红宝石成语来简化此代码?
欢呼声
答案 0 :(得分:6)
如果所有水果都很甜
[apple, pear].compact.all?(&:sweet?)
compact
摆脱了nil
元素,然后all?(&:sweet?)
检查其余所有元素是否都是甜美的。
答案 1 :(得分:4)
Amadan提供的解决方案的替代方案:
fruits.all? { |f| f.nil? || f.sweet? }
尽管正如Amadan正确建议的那样,使用compact
的想法很简洁,但它可能会创建一个非null元素的临时数组,而仅使用all?
并不需要这样。一个数组,一旦遇到不满足条件的元素,迭代就会停止。
当然,如果您的代码中仅包含两个结果,而我们对此进行了明确介绍,那么我认为比起
更好地理解您的代码[apple,pear].all? {...}