Skip to content

Instantly share code, notes, and snippets.

@coderunner
Created May 10, 2013 17:40
Show Gist options
  • Select an option

  • Save coderunner/5556058 to your computer and use it in GitHub Desktop.

Select an option

Save coderunner/5556058 to your computer and use it in GitHub Desktop.

Revisions

  1. Felix Trepanier created this gist May 10, 2013.
    63 changes: 63 additions & 0 deletions decomposition.scala
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,63 @@
    object scrap {
    trait Value

    case class StringValue(value: String) extends Value

    case class LongValue(value: Long) extends Value

    val value: Value = StringValue("test")

    /**** Matching ****/
    val StringValue(s1) = value
    //s1: String = test

    val LongValue(l1) = value
    /*
    scala.MatchError: StringValue(test) (of class StringValue)
    at .<init>(<console>:13)
    at .<clinit>(<console>)
    at .<init>(<console>:11)
    at .<clinit>(<console>)
    at $print(<console>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57
    )
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
    .java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:704)
    at scala.tools.nsc.interpreter.IMain$Request$$anonfun$14.apply(IMain.scala:920)
    at scala.tools.nsc.interpreter.Line$$anonfun$1.apply$mcV$sp(Line.scala:43)
    at scala.tools.nsc.io.package$$anon$2.run(package.scala:25)
    at java.lang.Thread.run(Thread.java:722)
    */

    /**** Instanceof ****/

    val s2 = value.asInstanceOf[StringValue].value
    //s2: String = test

    val l2 = value.asInstanceOf[LongValue].value

    /*
    java.lang.ClassCastException: StringValue cannot be cast to LongValue
    at .<init>(<console>:13)
    at .<clinit>(<console>)
    at .<init>(<console>:11)
    at .<clinit>(<console>)
    at $print(<console>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57
    )
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
    .java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:704)
    at scala.tools.nsc.interpreter.IMain$Request$$anonfun$14.apply(IMain.scala:920)
    at scala.tools.nsc.interpreter.Line$$anonfun$1.apply$mcV$sp(Line.scala:43)
    at scala.tools.nsc.io.package$$anon$2.run(package.scala:25)
    at java.lang.Thread.run(Thread.java:722)
    */
    }