编辑:找到答案,见帖子结尾。
不断收到错误,发现这是因为我试图将结果类型添加到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
好的,回答。之前从未见过。我想我会把这个留给后人。
答案 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]