private val alwaysTrue = (_, _) => true
使编译器抱怨它需要两个_
的类型。为什么?他们只是被丢弃了,不应该被推断为Scala.Any
?
答案 0 :(得分:1)
您必须显式提供匿名函数的参数类型,除非其他东西需要特定类型 - 在这种情况下,编译器将尝试推断该类型,如果可以的话。它位于SLS 6.23:
如果匿名函数的预期类型的格式为
scala.Functionn[S1,…,Sn, R]
,则e
的预期类型为R
,任何参数的类型为Ti
{ {1}}可以省略,其中假定为xi
。如果匿名函数的预期类型是其他类型,则必须明确指定所有形式参数类型,并且caseTi = Si
的预期类型未定义。
我只是稍微阅读了一行,但没有预期的类型,所以你必须明确提供类型。
e
如果您有类似private val alwaysTrue = (_: Any, _: Any) => true
的内容,则预期类型为List(1, 2, 3).filter(_ > 3)
,因此无需提供参数类型。