我有一個測試程序,我們在內存中的靜態數組。爲了簡潔,我使用類型別名。類型被創建,但如上述用於創建陣列相同的語法:類型別名工作在REPL但不在斯卡拉類/對象
在REPL
type >[T] = Array[T]
val dat = >(>(1,2,3),>(2,3,4))
dat: Array[Array[Int]] = Array(Array(1, 2, 3), Array(2, 3, 4))
以下作品然而爲「A」,從「>」確實不工作改變標識符失敗:
scala> type A[T] = Array[T]
defined type alias A
scala> val dat = A(A(1,2,3),A(2,3,4))
<console>:7: error: not found: value A
val dat = A(A(1,2,3),A(2,3,4))
另外,NEITHER的Scala程序AFAICT內的兩個以上的工作:
test("VectorProjection") {
type A[T] = Array[T]
// Next line shows RED for all the A's and also has compiler error: "not found: value A"
val dat = A(A(1., 2., 3.), A(1.5,2.,2.5), A(2.,3.8,5.6), A(2.5,3.0,3.5), A(3.1,3.7,4.3))
val firsteigen = subtractProject(dat(0), dat(4))
}
尋找:
- 1)對於REPL:爲什麼符號「>」作品的解釋,但不是 標識符將是有益的。
- 2)對於一個真正的Scala程序/類: 的如果有可能由詹姆斯IRY使用類似於任何語法 上述
UPDATE每建議以下方法確實可行的解釋:
def A[T : ClassTag](ts: T*) = Array(ts:_*)
這是在行動:
test("VectorProjection") {
def A[T : ClassTag](ts: T*) = Array(ts:_*)
val dat = A(
A(1., 2., 3.),
A(1.5,2.,2.5),
A(3.,6.,9.) )
val firstEigen = subtractProject(dat(0), dat(5))
println(s"firstEigen: ${firstEigen.mkString(",")}")
}
另一個更新另一個答案擊中接近這個OP:
使用類型和Val在一起:
type A = Array[Double]
val A = Array
這是在行動:
test("VectorProjection") {
type A = Array[Double]
val A = Array
val dat = A(
A(1., 2., 3.),
A(1.5,2.,2.5),
A(3.,6.,9.) )
val firstEigen = subtractProject(dat(0), dat(5))
println(s"firstEigen: ${firstEigen.mkString(",")}")
}
你使用的是什麼版本的scala?你的第一個例子不適合我(斯卡拉2.11.2)(和afaik不/不應該適用於任何版本)。至於爲什麼,請參閱[這個答案](http://stackoverflow.com/a/15784052/2650437)。 – Marth 2015-01-09 22:42:47
@Marth scala 2.10.4 – javadba 2015-01-09 23:03:52
每個人都想知道你是如何執行你的repl會話的。 – 2015-01-09 23:06:02