2015-10-24 49 views
1

如何初始化類型A的數組與其他數組長度相同? (在這種情況下,A是String或智力)在斯卡拉初始化任何類型的數組

def init_arr_with_same_len[A](arr1: Array[A]): Array[A] = { 
    val len = arr1.length 
    val arr2 = new Array[A](len) 
    arr2 
    } 

回答

4

與其他集合類型相比,數組有點特別。看到這個可愛的文章更多細節(http://docs.scala-lang.org/overviews/collections/arrays.html)。

它的缺點是爲了讓scala中的數組支持泛型(java數組不支持泛型),您需要爲泛型提供一個scala.reflect.ClassTag。

Welcome to Scala version 2.11.7 (OpenJDK 64-Bit Server VM, Java 1.8.0_65). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> import scala.reflect.ClassTag 
import scala.reflect.ClassTag 

scala> def arrayOfSameTypeAndSize[A](a: Array[A])(implicit ct: ClassTag[A]): Array[A] = new Array(a.size) 
arrayOfSameTypeAndSize: [A](a: Array[A])(implicit ct: scala.reflect.ClassTag[A])Array[A] 

scala> val x: Array[Int] = arrayOfSameTypeAndSize(Array(1,2,3)) 
x: Array[Int] = Array(0, 0, 0) 

scala> 

或稍微簡潔些。

scala> def arrayOfSameTypeAndSize[A: ClassTag](a: Array[A]): Array[A] = new Array(a.size) 
arrayOfSameTypeAndSize: [A](a: Array[A])(implicit evidence$1: scala.reflect.ClassTag[A])Array[A] 

scala> val x: Array[Int] = arrayOfSameTypeAndSize(Array(1,2,3)) 
x: Array[Int] = Array(0, 0, 0) 

scala>