有没有更好的方法在列表中而不是这个?

时间:2013-07-16 21:05:55

标签: scala

我正在尝试简化方形通话。

这是最好的方式吗?

(1 to 10).map(x => x*x)

3 个答案:

答案 0 :(得分:8)

在某处宣布这个:

def sqr(x: Int) = x * x

之后使用它:

(1 to 10).map(sqr)

答案 1 :(得分:4)

由于平方是对幂2的取幂,因此考虑以下两种方法是有意义的:

scala> (1 to 10).map(math.pow(_, 2))
res6: scala.collection.immutable.IndexedSeq[Double] = Vector(1.0, 4.0, 9.0, 16.0, 25.0, 36.0, 49.0, 64.0, 81.0, 100.0)

scala> (1 to 10).map(BigInt(_).pow(2))
res7: scala.collection.immutable.IndexedSeq[scala.math.BigInt] = Vector(1, 4, 9, 16, 25, 36, 49, 64, 81, 100)

答案 2 :(得分:4)

这可能有点矫枉过正,但它相当简单而且很酷:

object SquareApp extends App {
    implicit class SquareableInt(i: Int) extends AnyVal { def squared = i*i }

    (0 until 10).map(_ squared)
}

implicit函数会自动将调用squared的任何Int转换为SquareableInt对象。