2009-08-27 20 views
6

Zasadniczo mam tablicę takich jak to:Jak mogę wymusić typ tablicy po jej zainicjowaniu w Scali?

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

A kiedy Scala widzi, że chce to zrobić:

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

Ale wolałbym na to, aby to zrobić:

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

próbowałem:

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

Ale scala mówi:

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

To wydaje mi się być w zasadzie mówi mi, że konstruktor Array chce dowiedzieć się, co rodzaj tablicy jest z argumentów. Zwykle jest to niesamowite, ale w tym przypadku mam dobre powody, dla których chcę, aby elementy tablicy były Byte s.

Rozglądałem się za wskazówkami na ten temat, ale wydaje mi się, że niczego nie mogę znaleźć. Każda pomoc będzie świetna!

+1

Zauważ, że bajty są podpisane, więc ich prawidłowy zakres to -128 do 127. – starblue

Odpowiedz

5

Powinno być:

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) 

To nie jest niezmienna. Sekwencja byłaby krokiem w tym kierunku, nawet jeśli jest to tylko cecha (jak wspomina w komentarzach Christopher) dodająca skończone sekwencje elementów. Lista Scala byłaby niezmienna.

+2

W rzeczywistości, SEK jest cechą. Array ma cechę Seq, ale nie ma to nic wspólnego z niezmiennością. Zamiast tego ma do czynienia z zamówieniem. – Christopher

+0

To wydaje się rozwiązać mój problem, dziękuję! – Christopher

+0

Lista byłaby niezmienna, ale ma bardzo słabe cechy dostępu swobodnego. Tablica jest odpowiednia dla tej sytuacji, ponieważ jest tabelą odnośników. – Christopher

1

Pracuje w 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) 
Powiązane problemy