2014-12-10 9 views
5

bir Array[Any]Scala öğeleri toplayan bir fonksiyon nasıl tanımlanacağı rağmen</p> <pre><code>a.collect { case v: Int => v } res: Array[Int] = Array(1, 2) </code></pre> <p>,

val a = Array(1,2,"a") 
a: Array[Any] = Array(1, 2, a) 

Böyle tip Int tüm öğeleri toplayabilir düşünün koleksiyonundan bir tür öğeleri toplamak Belirli bir tipte, bunu denemeden, başarısız bir şekilde denemiş olan,

co[Int](a) 
ArraySeq(1, 2, a) 

co[String](a) 
ArraySeq(1, 2, a) 
+2

koymak elemanları statik olarak yazılan dillerde deyimsel değildir Scala gibi. – Jesper

+0

@Jesper tamamen katılıyorum, scala.language.dynamics kullanarak – elm

cevap

7

sunar 10 Sen desen maç için bir ClassTag sağlamak gerekir gerçekten işe: Böyle bir koleksiyonunda tamsayılar ve dizeleri olarak farklı türde

import scala.reflect.ClassTag 

def co[T: ClassTag](a: Array[Any]) = a.collect { case v: T => v } 
+0

Parlak, Teşekkürler! – elm