Scala - 在转换泛型类型时编译而不受模式赋值的限制

时间:2014-12-19 10:37:57

标签: scala

我几天前就遇到过这个错误,并且不太明白为什么Scala编译器允许这个代码编译:

class Foo[K] {

  def bar(k: K) = {
    val Seq(x) = k // Why isn't the compiler complaining about this?
    val Array(y) = k
    val List(z) = k
    println(k)
  }

}

object Main {
  def main(args: Array[String]) {
    val foo = new Foo[String]()
    foo.bar("hello")
  }
}

显然,K可以是任何东西,并且没有暗示或任何说它是Seq,List或Array的东西。为什么编译器找不到这个bug?我发现它非常荒谬且非常不安全。我使用的是Scala 2.10.3。

1 个答案:

答案 0 :(得分:1)

我同意这非常糟糕。有一个开放的错误:https://issues.scala-lang.org/browse/SI-5898