You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Use of sequence extractors in a particular order induces an incorrect match. The test case below fails under 2.8.0.RC2, but works correctly under 2.7.7
Welcome to Scala version 2.8.0.RC2 (JavaHotSpot(TM) 64-BitServerVM, Java1.6.0_20).
Type in expressions to have them evaluated.
Type:help for more information.
scala>caseclassWrapper(list: List[String]) {
|defcheck(pf: PartialFunction[Wrapper,Any]) {
|if (pf.isDefinedAt(this)) pf(this)
| }
| }
defined classWrapper
scala>
scala>objectUnwrap {
|defunapplySeq(w: Wrapper) =Some(w.list)
| }
defined module Unwrap
scala>
scala>// works correctly
scala>Wrapper(List("a", "b")) check {
|caseUnwrap("a", "b") =>| }
scala>
scala>// works correctly
scala>Wrapper(List("a", "b")) check {
|caseUnwrap("c", "d") => assert(false, "c, d")
| }
scala>
scala>// works correctly
scala>Wrapper(List("a", "b")) check {
|caseUnwrap("e") => assert(false, "e")
| }
scala>
scala>// works correctly
scala>Wrapper(List("a", "b")) check {
|caseUnwrap("e") => assert(false, "e")
|caseUnwrap("c", "d") => assert(false, "c, d")
| }
scala>
scala>// fails
scala>Wrapper(List("a", "b")) check {
|caseUnwrap("c", "d") => assert(false, "c, d")
|caseUnwrap("e") => assert(false, "e")
| }
java.lang.AssertionError: assertion failed: e
at scala.Predef$$.assert(Predef.scala:93)
at $$anonfun$$1.apply(<console>:11)
at $$anonfun$$1.apply(<console>:9)
at Wrapper.check(<console>:7)
at .<init>(<console>:9)
at .<clinit>(<console>)
at RequestResult$$.<init>(<console>:9)
at RequestResult$$.<clinit>(<console>)
at RequestResult$$scala_repl_result(<console>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at scala.tools.nsc.Interpreter$$Request$$$$anonfun$$loadAndRun$$1$$$$anonfun$$apply$$18.apply(Interpreter.scala:984)
at scala.tools.nsc.Interpreter$$Requ...
scala>
scala>// fails, its not just PartialFunctions
scala>Wrapper(List("a", "b")) match {
|caseUnwrap("c", "d") => assert(false, "c, d")
|caseUnwrap("e") => assert(false, "e")
| }
java.lang.AssertionError: assertion failed: e
at scala.Predef$$.assert(Predef.scala:93)
at .<init>(<console>:11)
at .<clinit>(<console>)
at RequestResult$$.<init>(<console>:9)
at RequestResult$$.<clinit>(<console>)
at RequestResult$$scala_repl_result(<console>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at scala.tools.nsc.Interpreter$$Request$$$$anonfun$$loadAndRun$$1$$$$anonfun$$apply$$18.apply(Interpreter.scala:984)
at scala.tools.nsc.Interpreter$$Request$$$$anonfun$$loadAndRun$$1$$$$anonfun$$apply$$18.apply(Interpreter.scala:984)
at scala.util.control.Exc...
scala>
The text was updated successfully, but these errors were encountered:
Use of sequence extractors in a particular order induces an incorrect match. The test case below fails under 2.8.0.RC2, but works correctly under 2.7.7
Here is the test case:
And here is the interpreter transcript:
The text was updated successfully, but these errors were encountered: