好吧,所以我正在做一些测试以熟悉Scala,并希望看看我是否可以创建Java样式列表而不是你在Scala中使用它的奇特方式......
我知道你可以这样做:val lst = List.range(0, 100, 1)
但我只想看看scala中的java风格是什么样的
好吧,这就是我的所作所为:
var lst = List[Int]()
for(i <- 0 until 100) {
lst = lst :: i // here's where it complains
}
由于某种原因scala,或者至少scclipse的eala不喜欢我使用中缀符号附加,a-la lst :: i
它要我这样做:lst.::(i)
否则它说::
没有定义或什么,它不是第一次发生......
所以这里的任何人都可以解释为什么会这样做,或者它只是在eclipse中执行不良的情况,因此我必须忍受
答案 0 :(得分:7)
这不是中缀表示法的问题。相反,这是因为以:
结尾的方法名称被应用为
a ??: b
b.??:(a)
所以你只是向后反驳你的论点。
lst = i :: lst
会正常工作。
(当然,你的问题就是列表就像堆栈一样,所以你需要按相反的顺序推送数字。)
答案 1 :(得分:0)
在Scala中,List
具有不可变长度。它可以像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.
}