Scala Map Integer to(Integer => Integer)

时间:2014-04-16 02:23:54

标签: scala

我如何{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), ...]

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))