为什么此Scala列表中的所有元素都相同?

时间:2016-05-26 17:59:24

标签: list scala

我正在尝试将元素添加到列表中,但它总是最终使所有元素都相等。 我在这段代码中添加了元素:

var slots = List[Calendar]()                    
while (dateTimeBegin.getTime().compareTo(dateTimeEnd.getTime()) == -1) {
  dateTimeBegin.add(Calendar.MINUTE, 50)
  slots = dateTimeBegin :: slots
  println(dateTimeBegin.getTime())
}

println打印出来:

//> Wed May 25 12:50:00 WEST 2016
//| Wed May 25 13:40:00 WEST 2016
//| Wed May 25 14:30:00 WEST 2016
//| Wed May 25 15:20:00 WEST 2016
//| Wed May 25 16:10:00 WEST 2016

当我尝试打印列表时:

for (i <- 0 to slots.length - 1) {
    println(slots(i).getTime())
}

我得到了这个输出:

//> Wed May 25 16:10:00 WEST 2016
//| Wed May 25 16:10:00 WEST 2016
//| Wed May 25 16:10:00 WEST 2016
//| Wed May 25 16:10:00 WEST 2016
//| Wed May 25 16:10:00 WEST 2016

我尝试以各种方式更改行slots = dateTimeBegin :: slots。我尝试将::更改为::=::+以及许多不同的组合,但从未设法获得正确的结果。

有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:4)

您正在循环中更改dateTimeBegin中的值。想一想:你在列表中添加了对相同变量的五个引用,然后你想知道为什么它们都具有相同的值......

他们不喜欢scala中的可变变量......