스칼라에서 패턴 일치가 철저히 일치하는 패턴을 찾을 때 왜 케이스를 지키고 있습니까?스칼라 패턴 매칭 가드가 패턴 매칭의 완전성을 깨뜨린 것입니까?
[email protected]:~/dev/bitcoins-core$ sbt console
[info] Loading project definition from /home/chris/dev/bitcoins-core/project
[info] Set current project to bitcoin-s-core (in build file:/home/chris/dev/bitcoins-core/)
[info] Starting scala interpreter...
[info]
Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_101).
Type in expressions to have them evaluated.
Type :help for more information.
scala> sealed trait A
defined trait A
scala> case class B() extends A
defined class B
scala> case class C() extends A
defined class C
scala> val b : A = B()
b: A = B()
scala> b match { case b : B =>() }
<console>:15: warning: match may not be exhaustive.
It would fail on the following input: C()
b match { case b : B =>() }
^
scala> b match { case b : B if b.isInstanceOf[B] =>() }
scala>
마지막 줄에 아무런 주의력 경고가 없습니다. 여기에 뭔가 빠졌습니까?
그러나 더 최근의 결과는 Zaugg의 PR이 가능하다는 것에 대한 추측을 포함합니다. "왜 이런 식으로?"에 대한 완전한 대답? 그 부분적인 결과를 포함 할 것입니다. 이러한 경우 가드 상태에 대해 우리는 무엇을 기대해야합니까? 직관적으로, 어떤 경우는 명백하게 증명 될 수있는 것처럼 보입니다. –
방금 내가 알고있는 것에 대답했습니다. - 더 쓸 수 있으면 자유롭게 느낍니다. –
나는 당신이 무슨 뜻인지 안다! –