如何将 0 元匿名函数应用于数组
How to apply a 0-ary anonymous function to an array
具有 Int
的 Array
,以及不带参数的函数:
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
。看来匿名函数至少需要一个参数。
- 不使用
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())
具有 Int
的 Array
,以及不带参数的函数:
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
。看来匿名函数至少需要一个参数。
- 不使用
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())