Scala中部分应用的函数

时间:2012-11-22 19:01:36

标签: scala functional-programming partial-application

想知道您是否可以评论为什么以下两种情况的行为方式不同:

以下作品:

var la= List(12, 13 , 14 ,15);
var func = (x:Int) => println(x)
la.foreach(func)                   // 1
la.foreach(func(_))                // 2

但以下情况并非如此:

var la= List(12, 13 , 14 ,15);
var func1 = (x:Int) => {
    for (i <- 0 to x) yield i*2
 } mkString
la.foreach(println(func1))         // similar to 1 above
la.foreach(println(func1(_)))      // similar to 2 above

错误:类型不匹配;  发现:单位  必需:Int =&gt; ? la.foreach(的println(func1的(_)))

2 个答案:

答案 0 :(得分:5)

这个案子很沮丧

la.foreach(println(func1(_))) 

la.foreach(println(x => func1(x)))

因此,您将函数传递给println,打印返回类型为Unit,foreach需要一些Int => ?函数。

相比之下,两个案例中的第一个样本正在向foreach提供Int => Unit,而在第二个样本中,您正在向foreach提供Unit

答案 1 :(得分:3)

在第二个代码片段中,您使用函数作为参数调用println,然后尝试将该调用的结果作为参数传递给foreach。由于println不会返回某个函数,但foreach需要一个函数,但这不起作用。