1

好的,所以我正在做一些测试来熟悉 Scala,并想看看我是否可以制作 Java 风格的列表,而不是你在 Scala 中做的花哨的方式......

我知道你可以这样做:val lst = List.range(0, 100, 1)但我只是想看看 java 风格在 scala 中会是什么样子

好吧,这就是我所做的:

var lst = List[Int]()

for(i <- 0 until 100) {
    lst = lst :: i // here's where it complains
}

出于某种原因,scala,或者至少 eclipse 的 scala ide 不喜欢我使用中缀表示法附加,a-lalst :: i它希望我这样做:lst.::(i)否则它说::未定义或其他东西,它不是第一个它发生的时间......

所以这里的任何人都可以解释它为什么这样做,或者它只是 Eclipse 中实施不当的一个例子,因此我必须忍受

4

2 回答 2

7

这不是中缀表示法的问题。相反,这是因为以 结尾的方法名称:被应用为

a ??: b
b.??:(a)

所以你只是把你的论点倒过来。

lst = i :: lst

会正常工作。

(当然,您会遇到列表像堆栈一样的问题,因此您需要以相反的顺序推动数字。)

于 2013-05-09T18:11:34.817 回答
0

在 Scala 中, aList的长度是不可变的。它可以像LIFO(后进先出)结构一样工作,但不能像 Java 那样工作ArrayList

你正在这样做:

val lst = List[Int]()

这给了你lst的大小0。这意味着你真的不能用它做任何事情。

对于可变集合,请使用ListBuffer.

此外,::运算符是右结合的,这意味着它将在运算符右侧找到的对象上调用。

val lst = ListBuffer[Int]()

for (i <- 0 until 100) {
    lst += i // will add to the tail.
}
于 2013-05-09T18:10:58.760 回答