alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Scala example source code file (t2316.scala)

This example Scala source code file (t2316.scala) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Scala tags/keywords

string, t1, t1, t1fromt2, t1fromt2, t1fromt3, t2, t2, t3, t3

The Scala t2316.scala source code

object test {
  case class T1(val source: String)


  object T1 {
    implicit def T1FromT2(implicit t2: T2): T1 = T1("implicit def T1FromT2")
    implicit def T1FromT3(implicit t3: T3): T1 = T1("implicit def T1FromT3")
  }

  trait T2 {
  }

  object T2 {
    implicit val t2: T2 = new T2 {}
  }

  trait T3

  def requireT1(implicit t1: T1) = t1

  {
      val t1 = requireT1
      assert(t1.source == "implicit def T1FromT2")
  }

  {
      implicit def t3: T3 = new T3 {}
      val t1 = requireT1
      assert(t1.source == "implicit def T1FromT2")

      // Expected a compile error here, but because T1.T1FromT2(T2.t2) was cached as a non-local implicit
      // expression for type T1, this is not checked!
      //
      // (fragment of implicit-cache-error2.scala):26: error: ambiguous implicit values:
      // both method T1FromT3 in object T1 of type (implicit t3: this.T3)this.T1
      // and method T1FromT2 in object T1 of type (implicit t2: this.T2)this.T1
      // match expected type this.T1
      //    val t1 = requireT1
      //              ^
      // one error found

  }
}

Other Scala examples (source code examples)

Here is a short list of links related to this Scala t2316.scala source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.