如何将 0 元匿名函数应用于数组

How to apply a 0-ary anonymous function to an array

具有 IntArray,以及不带参数的函数:

scala> val a = new Array[Int](5)
a: Array[Int] = Array(0, 0, 0, 0, 0)

scala> def f(): Int = 1
f: ()Int

我想将函数 f() 应用到具有 map()transform() 的数组。我尝试了以下方法。

第一种方法

scala> a.map(f)
<console>:14: error: type mismatch;
 found   : () => Int
 required: Int => ?
       a.map(f)
             ^

它失败了,我不太明白为什么。

第二种方法

scala> a.map(x => f)
res1: Array[Int] = Array(1, 1, 1, 1, 1)

这个有效。但是,我在 => 的右侧声明了一个我不使用的参数 x。看来匿名函数至少需要一个参数。

实例

举例说明为什么要使用它。想象一下,我有一个数组,在某个时刻我想变异为具有随机值:

val a = new Array[Int](5)
// ...
a.transform(x => random())

尝试使用 underscore 来忽略像这样的参数

a.map(_ => f)

输出

res0: Array[Int] = Array(1, 1, 1, 1, 1)

只是为了玩转变换:

def to1[A, B](f: () => B): A => B = (_: A) =>  f()

val a = new Array[Int](5)
def f(): Int = 1
a.map(to1(f))

关于你的例子,考虑使用 fill:

val b = Array.fill[Int](a.size)(myArgLessFunc())