2009-08-27 18 views
6

基本上,我有一個這樣的數組:如何在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 
); 

當斯卡拉看到它,它要做到這一點:

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

但我寧願它這樣做:

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

我想:

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

但是斯卡拉說:

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

這在我看來,主要是告訴我,數組構造要弄清楚數組的類型與參數。通常這很棒,但在這種情況下,我有充分的理由希望數組元素爲Byte s。

我環顧四周尋找指導,但我似乎無法找到任何東西。任何幫助將是偉大的!

+1

注意字節簽署,所以他們的有效範圍爲-128到127 – starblue 2009-08-27 20:56:22

回答

5

它應該是:

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) 

這不是一成不變的。即使它只是一個特徵(如評論中提到的Christopher)添加了有限元素序列,Seq仍然是朝這個方向邁出的一步。一個Scala列表將是不可變的。

+2

事實上,序列是一個特點。一個數組具有Seq特性,但這與真正的不可變性沒有任何關係。相反,這與訂購有關。 – Christopher 2009-08-27 18:56:19

+0

這似乎解決了我的問題,謝謝! – Christopher 2009-08-27 19:00:14

+0

列表將是不可變的,但具有非常差的隨機訪問質量。一個數組適合這種情況,因爲它是一個查找表。 – Christopher 2009-08-27 19:55:19

1

作品在斯卡拉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)