Type Parameters and Generics
Generic Identity Wrapper
Wrap and unwrap a value with the same type parameter.
type-parameter
The `[A]` type parameter lets one definition work with many types. Here `Identity[A]` stores and returns a value without changing its type.
Generic Identity Wrapper
IdentityGeneric.scala
Replay: real traced execution (multi-file project)
case class Identity[A](value: A)
object Main {
def main(args: Array[String]): Unit = {
val number = 7
val wrapped = Identity[Int](number)
val kept = wrapped.value
val label = "kept=" + kept
println("number=" + number)
println(label)
}
}
case class Identity[A](value: A)
object Main {
def main(args: Array[String]): Unit = {
val number = 3
val wrapped = Identity[Int](number)
val kept = wrapped.value
val label = "kept=" + kept
println("number=" + number)
println(label)
}
}
case class Identity[A](value: A)
object Main {
def main(args: Array[String]): Unit = {
val number = 12
val wrapped = Identity[Int](number)
val kept = wrapped.value
val label = "kept=" + kept
println("number=" + number)
println(label)
}
}
number ← 7, wrapped ← Identity(7), kept ← 7, wrapped.value ← 7
3object Main {4 def main(args: Array[String]): Unit = {5 val number→ 7 = 7 //@number=3, 126 val wrapped→ Identity(7) = Identity[Int](number7)7 val kept→ 7 = wrapped.value→ 78 val label→ kept=7 = "kept=" + kept7910 println("number=" + number7)11 println(labelkept=7)12 }13}outputnumber=7 kept=7
number ← 3, wrapped ← Identity(3), kept ← 3, wrapped.value ← 3
3object Main {4 def main(args: Array[String]): Unit = {5 val number→ 3 = 36 val wrapped→ Identity(3) = Identity[Int](number3)7 val kept→ 3 = wrapped.value→ 38 val label→ kept=3 = "kept=" + kept3910 println("number=" + number3)11 println(labelkept=3)12 }13}outputnumber=3 kept=3
number ← 12, wrapped ← Identity(12), kept ← 12, wrapped.value ← 12
3object Main {4 def main(args: Array[String]): Unit = {5 val number→ 12 = 126 val wrapped→ Identity(12) = Identity[Int](number12)7 val kept→ 12 = wrapped.value→ 128 val label→ kept=12 = "kept=" + kept12910 println("number=" + number12)11 println(labelkept=12)12 }13}outputnumber=12 kept=12