object Test {
def main(args: Array[String]) {
val list: List[Double] = List(1.0, 2.0, 3.0, 4.0)
val none = None
case class Test()
val test = Test()
def f(x: Any) = x match {
case _: Some[Test] => println("_ matched")
case None => println("None matched")
}
f(list)
f(none)
f(test)
}
}
위의 코드를 컴파일하려고하면 "지워짐에 의한 제거"컴파일 타임 경고가 발생합니다. 스칼라 유형 지우기 옵션 일치
$>scalac Test.scala
Test.scala:11: warning: non-variable type argument Test in type pattern
Some[Test] is unchecked since it is eliminated by erasure
case _: Some[Test] => println("_ matched")
^
one warning found
나는이 높은 평가를 받고 유래
post를 읽을 수 있지만 여기 유형의 삭제를 이해하지 않습니다.
그래서 런타임시 JVM은 Some (Int)와 Some (String)의 차이를 알지 못하지만 Some (x)에서 x의'type'을 찾을 수 있습니까? –
@Kevin : 네, 다른 변수 유형과 같습니다. 스칼라 컴파일러는'case Some (e : Test)'를'if (arg.isInstanceOf [Some [_]] && arg.asInstanceOf [Some [Any]]. get.isInstanceOf [Test])와 같은 것으로 재 작성합니다. .asInstanceOf [일부 [모두]]. get.asInstanceOf [테스트] ...}'. – senia