Scalaでパターンマッチングがパターンマッチの完全性にマッチした場合、なぜガーディングが行われますか?スカラパターンマッチングガードは、パターンマッチングの徹底を破りますか?
[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です。 「これはなぜこういうの?」という完全な答え。それらの部分的な結果が含まれます。このような場合、ガード状態はどうなると思いますか?直感的には、明らかに証明可能なケースもあるようです。 –
私はちょっと私が知っているものに答えました - もっと書くこと自由に感じてください:) –
私はあなたが何を意味知っている! –