我有一个如果-否则-声明,我想做更多的干燥.

if flag?
  box? && ball?
else
  box?
end

也许我还有另一个陈述,看起来像这样

if flag?
  box? && ball? 
else
  box? && ball? && bat? 
end

如何清理这些条件,使它们看起来更干燥?

推荐答案

为了简化这样的条件,有时可以详细地编写它们,然后按照De Morgan's laws的顺序一步一步地进行转换.

if flag?
  box? && ball?
else
  box?
end

可以写成

(flag? && box? && ball?) || (!flag? && box?)

因为在这两种情况下box?都必须是true,所以您可以在其他条件之前先判断.

box? && ((flag? && ball?) || (!flag?))

它可以转换为

box? && (!flag? || ball?)

可以按照相同的步骤转换另一个表达式:

if flag?
  box? && ball? 
else
  box? && ball? && bat? 
end 

作为详细条件写入

(flag? && box? && ball?) || (!flag? && box? && ball? && bat?)

和转型

(box? && ball?) && ((flag?) || (!flag? && bat?))

最终得到了

box? && ball? && (flag? || bat?)

Ruby相关问答推荐

Ruby错误-应为数组或字符串,已获取哈希

在 clojure 中,如何将已排序整数数组划分为连续的分区?

是否可以在 Ruby 中使用正则表达式匹配字符串\b(退格字符)?

Ruby ERB 类给出未定义的局部变量或方法,但 erb 解析良好

判断一个数组是否是Ruby中另一个数组的子集

创建线程安全的临时文件名

是否有类似于 Ruby 的 Sinatra 的 .NET 框架?

Ruby: initialize() vs 类体(class body)?

确保如何在 ruby​​ 中工作

如何在Ruby中返回两个字符串之间的字符串的子字符串?

如何在 Ruby 中临时重定向标准错误?

在Ruby中第一个=符号之后获取子字符串

如何在没有 Rails 的情况下使用 RSpec?

从类对象获取类位置

. vs ::(点与双冒号)用于调用方法

什么是匹配不在行尾的字符串的正则表达式?

在 Ruby 中打开默认浏览器

运行 Ruby 命令时,PATH 中不安全的世界可写目录 /Users/username,模式 040777

如何将 270921sec 转换为天 + 小时 + 分钟 + 秒? (Ruby)

为什么 Ruby 有 TrueClass 和 FalseClass 而不是一个布尔类?