想知道您是否可以评论为什么以下两种情况的行为方式不同:
以下作品:
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的(_)))
答案 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
需要一个函数,但这不起作用。