简化Scala表达式计算比率

简化Scala表达式计算比率,scala,rectangles,aspect-ratio,Scala,Rectangles,Aspect Ratio,我试图计算Scala中java.awt.Rectangle的纵横比。我想要的是“长边与短边之比”“宽高比”的定义,而不是“宽高比”类型的宽高比 下面的代码可以工作,但是有没有办法避免临时变量并将其转换为一行程序 val sizes = Seq(rect.getWidth, rect.getHeight) val aspectRatio = sizes.max / sizes.min 一种方法,假设序列中只添加了两个值 Seq(rect.getWidth, rect.getHeight).sor

我试图计算Scala中
java.awt.Rectangle
的纵横比。我想要的是“长边与短边之比”“宽高比”的定义,而不是“宽高比”类型的宽高比

下面的代码可以工作,但是有没有办法避免临时变量并将其转换为一行程序

val sizes = Seq(rect.getWidth, rect.getHeight)
val aspectRatio = sizes.max / sizes.min

一种方法,假设序列中只添加了两个值

Seq(rect.getWidth, rect.getHeight).sorted.reverse.foldRight(1.0)( _ / _ ) 

不过,您建议的代码可读性更高,并且不太容易出错,最多需要注意零除

您不必创建序列来计算最小值和最大值。你可以用数学方法代替

val aspectRatio = if(rect.getWidth >= rect.getHeight) rect.getWidth / rect.getHeight else rect.getHeight / rect.getWidth
Math.max(rect.getWidth, rect.getHeight) / Math.min(rect.getWidth, rect.getHeight)

创建序列并在其上执行3个操作对于这样简单的任务来说太复杂了。它的格式正确。请看样式指南的最后一段:,“琐碎条件”。此外,这是一项非常琐碎的任务。我看我们没有理由在这里使用比if/else更多的东西。