为什么我不能在Scala中为匿名函数指定结果类型?

时间:2016-06-08 23:16:44

标签: scala

编辑:找到答案,见帖子结尾。

不断收到错误,发现这是因为我试图将结果类型添加到lambdas。这很好

(p: Int) => p

,而

(p: Int): Int => p

引起投诉。我很惊讶 - 为什么不允许它?毕竟,如果我指定lambda,我可以在变量中指定一个类型(我已将类型括在可读性中):

val f2: (Int => Int) = (p: Int) => p

但我不妨def

def f2(p: Int): Int = p

在禁止它时我看不出任何明显的伤害,但这是出乎意料的。想法?

编辑:石头我,你可以:

(p: Int) => p : Int

好的,回答。之前从未见过。我想我会把这个留给后人。

1 个答案:

答案 0 :(得分:1)

根据0__的建议,答案是使用类型为lambda的主体添加后缀,而不是将其放在参数列表之后,如def语法所建议的那样。

我正在使用的实际示例,用于构造列表并返回前两项的元组:

(p: List[Int]): Tuple2[Int, Int] => { val x :: y :: rest = p; (x, y) }

失败,但这成功了

(p: List[Int]) => { val x :: y :: rest = p; (x, y) }: Tuple2[Int, Int]