2

有一个ArrayofInt和一个没有参数的函数:

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

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

我想用or将该函数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不在=>. 似乎匿名函数至少需要一个参数。

  • 不使用正确x吗?
  • 它甚至是一种糟糕的功能风格吗?

实际例子

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

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

2 回答 2

1

尝试使用下划线来忽略这样的参数

a.map(_ => f)

哪个输出

res0: Array[Int] = Array(1, 1, 1, 1, 1)
于 2019-09-04T15:44:51.610 回答
0

只是为了玩转换:

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())
于 2019-09-04T16:36:38.117 回答