2009-08-27 4 views
6

Grundsätzlich habe ich ein Array wie folgt aus:Wie kann ich den Typ eines Arrays erzwingen, wenn es in Scala initialisiert wird?

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 
); 

Und wenn scala es sieht, will es, dies zu tun:

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

Aber ich würde es vorziehen, für sie, dies zu tun:

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

ich habe versucht:

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

Aber scala sagt:

<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) 

Dies scheint mir im Grunde genommen zu sein, mir zu sagen, dass der Array-Konstruktor will die Art der Anordnung, um herauszufinden, was von den Argumenten ist. Normalerweise ist das großartig, aber in diesem Fall habe ich gute Gründe dafür, dass die Array-Elemente Byte s sind.

Ich habe nach Hinweisen gesucht, aber ich kann nichts finden. Jede Hilfe wäre großartig!

+1

Beachten Sie, dass Bytes unterzeichnet werden, so dass ihr gültiger Bereich von -128 bis 127 ist – starblue

Antwort

5

es sein sollte:

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) 

Das ist nicht unveränderlich ist. Ein Seq wäre ein Schritt in diese Richtung, auch wenn es nur ein Merkmal ist (wie in den Kommentaren erwähnt), indem endliche Elementfolgen hinzugefügt werden. Eine Scala-Liste wäre unveränderlich.

+2

In der Tat ist Seq ein Merkmal. Ein Array hat die Seq-Eigenschaft, aber das hat nichts damit zu tun, dass es unveränderlich ist. Es hat vielmehr damit zu tun, bestellt zu werden. – Christopher

+0

Dies scheint mein Problem zu lösen, danke! – Christopher

+0

Eine Liste wäre unveränderlich, hat aber sehr schlechte Direktzugriffsqualitäten. Ein Array ist für diese Situation geeignet, da es sich um eine Nachschlagetabelle handelt. – Christopher

1

Werke in der 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) 
Verwandte Themen