object the extends Dynamic
An enhanced alternative to Predef.implicitly
.
Used as a term the[T]
yields the unique implicit value of type T
in the current
implicit scope, if any. It is a compile time error if there is no such value. Its
primary advantage over Predef.implicitly
is that it will preserve any refinement that
the implicit definition has, resulting in more precisely typed, and hence often more
useful, values,
scala> trait Foo { type T ; val t: T } defined trait Foo scala> implicit val intFoo: Foo { type T = Int } = new Foo { type T = Int ; val t = 23 } intFoo: Foo{type T = Int} = $anon$1@6067b682 scala> implicitly[Foo].t // implicitly loses precision res0: Foo#T = 23 scala> implicitly[Foo].t+13 <console>:13: error: type mismatch; found : Int(13) required: String implicitly[Foo].t+13 ^ scala> the[Foo].t // the retains it res1: Int = 23 scala> the[Foo].t+13 res2: Int = 36
Unlike implicitly
, the
can also be used in type position, thanks to a trick
due to Denys Shabalin (@den_sh) and Eugene Burmako (@xeno_by). Here we use a
combination of selectDynamic
and backticks to embed a type in a path which
appears to the compiler as stable,
scala> val i: implicitly[Foo].T = 23 // syntax error <console>:1: error: ';' expected but '.' found. val i: implicitly[Foo].T = 23 ^ scala> val i: the.`Foo`.T = 23 // OK i: Int = 23
Linear Supertypes
Ordering
- Alphabetic
- By Inheritance
Inherited
- the
- Dynamic
- AnyRef
- Any
- Hide All
- Show All
Visibility
- Public
- All
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- macro def apply[T](implicit t: T): T
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- macro def selectDynamic(tpeSelector: String): Any
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )