未绑定的通配符类型

时间:2015-07-17 08:36:04

标签: scala types existential-type unbounded-wildcard

当我得到error: unbound wildcard type时,我在Scala REPL中玩耍。我试图声明这个(无用的)函数:

def ignoreParam(n: _) = println("Ignored")

为什么我收到此错误?

是否可以在不引入命名类型变量的情况下声明此函数?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:9)

Scala不会在参数中推断类型,类型从声明流向use-site,所以不,你不能写。您可以将其写为def ignoreParam(n: Any) = println("Ignored")def ignoreParam() = println("Ignored")

就目前而言,你的类型签名并没有多大意义。您可能期望Scala推断n: Any,但由于Scala不推断参数类型,因此没有赢家。在Haskell中,由于其强大的类型推理引擎,您可以合法地编写ignoreParam a = "Ignored"

为了得到你想要的最接近的东西,我想把它写成def ignoreParams[B](x: B) = println("Ignored")