为什么我需要指定不关心输入的类型?

时间:2015-08-05 20:33:45

标签: scala type-inference

private val alwaysTrue = (_, _) => true

使编译器抱怨它需要两个_的类型。为什么?他们只是被丢弃了,不应该被推断为Scala.Any

1 个答案:

答案 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),因此无需提供参数类型。