我如何{1}}在列表上从1到100(包含)使每个项目成为一个函数1,使每个元素都被部分应用map
。
我试过了:
(itself * _)
期望的输出:
scala> val xs: List[Integer => Integer] = List.range(1,101).map { x => _ * x }
<console>:13: error: missing parameter type for expanded function ((x$1) =>
x$1.$times(x))
val xs: List[Integer => Integer] = List.range(1,101).map { x => _ * x }
然后,这也是预期的:
val xs: List[Integer] = List[1,2,3,4, .., 100]
val desired: List[Integer => Integer] = List[(*1), (*2), ...]
答案 0 :(得分:2)
编译器正在告诉您这里需要解决的问题:&#34;缺少参数类型&#34;。将_ * x
更改为(_: Integer) * x
。
顺便提一下,您有什么理由在这里使用java.lang.Integer
吗?你可能意思是scala.Int
:
val fns: List[Int => Int] =
List.range(1, 101).map{x => (_: Int) * x}
答案 1 :(得分:1)
<强>说明:强> 编译器无法推断出''_''的类型。 这是因为''''不需要是一个整数,只是因为你使用了一个整数列表来创建这些函数。
此时还有其他的说法,不清楚应该将哪种类型绑定到部分应用函数的free参数。
如前所述,如果输入为整数
,此解决方案适用于您的情况(1 to 101) map ( x => x * (_:Int) )
示例:
val functions = (1 to 101) map ( x => x * (_:Int) )
这将有效
functions map (_(2))
res13: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 4 ...
这会失败:
functions map (_(2.5))
<console>:9: error: type mismatch;
found : Double(2.5)
required: Int
functions map (_(2.5))