当我得到error: unbound wildcard type
时,我在Scala REPL中玩耍。我试图声明这个(无用的)函数:
def ignoreParam(n: _) = println("Ignored")
为什么我收到此错误?
是否可以在不引入命名类型变量的情况下声明此函数?如果是这样,怎么样?
答案 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")
。