如何使用制表符生成列表,哪些条目在Scala中是平方的?

时间:2016-09-10 14:40:46

标签: list scala

我是Scala的新手,我正在尝试使用tabulate()方法生成一个List。

我看到它以这种方式使用,并且完美地运行,

val myList = List.tabulate(10)(_ * 2)

但这不是

val myList = List.tabulate(10)(_ * _)

然而,我得到了我想要的东西,

val myList = List.tabulate(10)(n => n * n)

我能知道为什么第二个例子不起作用吗?

1 个答案:

答案 0 :(得分:3)

使用下划线表示的匿名函数应具有与下划线相同数量的参数。您正在使用的List.tabulate的特定重载(对于一维)需要一个只有参数的函数,但是您提供了一个带有两个函数的函数。

换句话说,_ * _扩展为(a, b) => a * b,并且无法用下划线表示a => a * a

或者,您可以使用math.pow(_, 2)作为平方函数,但它会返回Double而不是Int

scala> List.tabulate(10)(math.pow(_, 2))
res0: List[Double] = List(0.0, 1.0, 4.0, 9.0, 16.0, 25.0, 36.0, 49.0, 64.0, 81.0)