2009-08-27 9 views
6

Básicamente, tengo una serie como esta:¿Cómo puedo forzar el tipo de una matriz cuando se inicializa en Scala?

val base_length = Array(
    0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, 
    64, 80, 96, 112, 128, 160, 192, 224, 0 
); 

Y cuando Scala lo ve, lo que quiere hacer esto:

base_length: Array[Int] = Array(...) 

Pero yo preferiría para que haga esto:

base_length: Array[Byte] = Array(...) 

me trataron:

val base_length = Array[Byte](...) 

Pero Scala dice:

<console>:4: error: type arguments [Byte] do not conform to method apply's type 
parameter bounds [A <: AnyRef] 
     val base_length = Array[Byte](1,2,3,4,5) 

Esto me parece ser básicamente me dice que el constructor Array quiere averiguar cuál es el tipo de la matriz es de los argumentos. Normalmente eso es increíble, pero en este caso tengo buenas razones para querer que los elementos de la matriz sean Byte s.

He buscado una guía sobre esto, pero parece que no puedo encontrar nada. ¡Cualquier ayuda sería genial!

+1

Nota que los bytes se firman, por lo que su rango válido es de -128 a 127. – starblue

Respuesta

5

Debería ser:

C:\prog\>scala 
Welcome to Scala version 2.7.5.final (Java HotSpot(TM) Client VM, Java 1.6.0_16). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> val gu: Array[Byte] = Array(18, 19, 20) 
gu: Array[Byte] = Array(18, 19, 20) 

Esto no es inmutable. Un Seq sería un paso en esa dirección, incluso si es solo un rasgo (como menciona Christopher en los comentarios) al agregar secuencias finitas de elementos. Una lista de Scala sería inmutable.

+2

De hecho, Sec es un rasgo. Una matriz tiene el rasgo Seq, pero esto realmente no tiene nada que ver con ser inmutable. En cambio, tiene que ver con ser ordenado. – Christopher

+0

Esto parece resolver mi problema, ¡gracias! – Christopher

+0

Una lista sería inmutable, pero tiene cualidades de acceso aleatorio muy pobres. Una matriz es apropiada para esta situación porque es una tabla de búsqueda. – Christopher

1

Obras en Scala 2.8.0:

Welcome to Scala version 2.8.0.r18502-b20090818020152 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_15). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> Array[Byte](0, 1, 2) 
res0: Array[Byte] = Array(0, 1, 2) 
Cuestiones relacionadas