简化Scala表达式计算比率
我试图计算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
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更多的东西。