Apakah Anda menemukan artikel ini ? Ini mencakup fitur terikat konteks baru, dalam konteks peningkatan array.
Umumnya, parameter tipe dengan konteks terikat adalah dalam bentuk [T: Bound]
; itu diperluas ke parameter tipe biasa T
bersama dengan parameter tipe implisit Bound[T]
.
Pertimbangkan metode tabulate
yang membentuk larik dari hasil penerapan fungsi tertentu f pada rentang angka dari 0 hingga panjang tertentu. Sampai dengan Scala 2.7, tabulasi dapat ditulis sebagai berikut:
def tabulate[T](len: Int, f: Int => T) = {
val xs = new Array[T](len)
for (i <- 0 until len) xs(i) = f(i)
xs
}
Dalam Scala 2.8 hal ini tidak lagi memungkinkan, karena informasi runtime diperlukan untuk membuat representasi yang tepat Array[T]
. Seseorang perlu memberikan informasi ini dengan meneruskan a ClassManifest[T]
ke dalam metode sebagai parameter implisit:
def tabulate[T](len: Int, f: Int => T)(implicit m: ClassManifest[T]) = {
val xs = new Array[T](len)
for (i <- 0 until len) xs(i) = f(i)
xs
}
Sebagai bentuk singkatan, konteks terikat dapat digunakan pada parameter tipe T
sebagai gantinya, memberikan:
def tabulate[T: ClassManifest](len: Int, f: Int => T) = {
val xs = new Array[T](len)
for (i <- 0 until len) xs(i) = f(i)
xs
}