2014-10-29 124 views
4

我正在尝试计算Scala中java.awt.Rectangle的纵横比。我要选择长宽比的“长边比短边”的“比率”,而不是“宽高比”类型的宽高比。简化Scala表达式计算比例

下面的代码工作,但有没有办法避免临时变量,并将其变成一个单线?

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

回答

8

的一种方法,假设只有两个值是零添加到序列,

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

您提出的代码更易读,虽然,较少容易出错,在大多数部门将需要一些关心。

+3

创建序列并在其上执行3个操作对于如此简单的任务来说太复杂了。 – rtruszk 2014-11-03 22:45:36

5
val aspectRatio = if(rect.getWidth >= rect.getHeight) rect.getWidth/rect.getHeight else rect.getHeight/rect.getWidth 
+0

+1仅用于比较一次。 – Andreas 2014-10-29 12:08:55

+0

格式正确。请查看风格指南的最后一段:http://docs.scala-lang.org/style/control-structures.html,“琐碎条件”。此外,这是一项非常简单的任务。我看不出为什么我们应该使用比if/else更多的东西。 – makingthematrix 2014-11-04 08:17:50

18

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

Math.max(rect.getWidth, rect.getHeight)/Math.min(rect.getWidth, rect.getHeight)