我在Windows下使用Scala 2.10.3和Java 1.7.0_45(64位)在我的代码中
List.range(0, 10) map {ListBuffer[Int]()}
抛出java.lang.IndexOutOfBoundsException.但另一方面,
List.range(0, 10) map {i => ListBuffer[Int]()}
效果很好.
所以我想知道为什么会这样?两个表达式之间有什么区别吗?
ListBuffer[T]
的apply方法查找给定索引处的元素.因此,您可以将a ListBuffer[T]
视为一种功能Int => T
:
val buf = ListBuffer[Int](1, 2, 3); val f: Int => Int = buf val i = f(1) //i == 2
因此,您的第一个示例是传递给map
一个函数,该函数在空列表缓冲区中的给定索引处查找元素,即它等效于
List.range(0, 10) map {i => ListBuffer[Int]()(i)}
因此例外.