Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 产生多个迭代器,然后展平未按预期工作_Scala - Fatal编程技术网

Scala 产生多个迭代器,然后展平未按预期工作

Scala 产生多个迭代器,然后展平未按预期工作,scala,Scala,如下代码生成50个迭代器[String]。展平此集合是否应返回50而不是1 val v1: Iterator[String] = List("1").toIterator val l: Iterator[String] = (for (a <- 1 to 50) yield v1).flatten.toIterator println(l.size) val v1:Iterator[String]=List(“1”).toIterator val l:Iterator[S

如下代码生成50个迭代器[String]。展平此集合是否应返回50而不是1

  val v1: Iterator[String] = List("1").toIterator

  val l: Iterator[String] = (for (a <- 1 to 50) yield v1).flatten.toIterator

  println(l.size)
val v1:Iterator[String]=List(“1”).toIterator

val l:Iterator[String]=(对于(aNo,因为Iterator是可变的,所以在遍历的第一步(作为展平的一部分)之后,它变为空。换句话说,这第一步产生了在所有剩余元素之间共享的副作用,因为它们都引用同一个Iterator。因此,在协调期间(见下文),第一个元素将被存储为
向量(1)
,其他元素将成为空向量。您的
(对于(a否,因为迭代器是可变的,所以在遍历的第一步之后(作为展平的一部分)它变为空。换句话说,这第一步产生的副作用在所有剩余的元素之间共享,因为它们都引用同一个迭代器。因此,在协调过程中(见下文),第一个元素被存储为
向量(1)
,而其他元素则成为空向量
scala> val v1: Iterator[String] = List("1").toIterator
v1: Iterator[String] = non-empty iterator

scala> val v = (for (a <- 1 to 50) yield v1).toVector
v: Vector[Iterator[String]] = Vector(non-empty iterator, non-empty iterator, non-empty iterator, ...

scala> v.head.toVector
res16: Vector[String] = Vector(1)

scala> v.head.toVector
res20: Vector[String] = Vector()

scala> v.tail.head.toVector
res17: Vector[String] = Vector()
scala> val v1: Iterator[String] = List("1").toIterator
v1: Iterator[String] = non-empty iterator

scala> v1.size
res18: Int = 1

scala> v1.size
res19: Int = 0
scala> val v1: Stream[String] = List("1").toStream
v1: Stream[String] = Stream(1, ?)

scala> val l: Stream[String] = (for (a <- 1 to 50) yield v1).flatten.toStream
l: Stream[String] = Stream(1, ?)

scala> l.size
res21: Int = 50