我是Scala的新手,我正在尝试使用tabulate()
方法生成一个List。
我看到它以这种方式使用,并且完美地运行,
val myList = List.tabulate(10)(_ * 2)
但这不是
val myList = List.tabulate(10)(_ * _)
然而,我得到了我想要的东西,
val myList = List.tabulate(10)(n => n * n)
我能知道为什么第二个例子不起作用吗?
答案 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)