diff options
author | Aleksandar Pokopec <aleksandar.prokopec@epfl.ch> | 2010-04-25 19:58:01 +0000 |
---|---|---|
committer | Aleksandar Pokopec <aleksandar.prokopec@epfl.ch> | 2010-04-25 19:58:01 +0000 |
commit | bd66ed93afc0b6b1bb7293f7930ab6c2d2c55a49 (patch) | |
tree | f4874574c58b864b3f1fb1b93b0a197de752f3c7 | |
parent | 1148683005899ec86f7b1028cd36671a1045e650 (diff) | |
download | scala-bd66ed93afc0b6b1bb7293f7930ab6c2d2c55a49.tar.gz scala-bd66ed93afc0b6b1bb7293f7930ab6c2d2c55a49.tar.bz2 scala-bd66ed93afc0b6b1bb7293f7930ab6c2d2c55a49.zip |
Fixes #3350. review by extempore
-rw-r--r-- | src/library/scala/collection/immutable/Stream.scala | 10 | ||||
-rw-r--r-- | test/files/run/stream_length.scala | 15 |
2 files changed, 25 insertions, 0 deletions
diff --git a/src/library/scala/collection/immutable/Stream.scala b/src/library/scala/collection/immutable/Stream.scala index 50fa07c2cf..fbda0b918b 100644 --- a/src/library/scala/collection/immutable/Stream.scala +++ b/src/library/scala/collection/immutable/Stream.scala @@ -104,6 +104,16 @@ self => loop(this, "") } + override def length: Int = { + var len = 0 + var left = this + while (!left.isEmpty) { + len += 1 + left = left.tail + } + len + } + /** It's an imperfect world, but at least we can bottle up the * imperfection in a capsule. */ diff --git a/test/files/run/stream_length.scala b/test/files/run/stream_length.scala new file mode 100644 index 0000000000..68e9cad5ac --- /dev/null +++ b/test/files/run/stream_length.scala @@ -0,0 +1,15 @@ + + +object Test { + def walk(depth: Int, bias: String): Stream[String] = { + if (depth == 0) + Stream(bias) + else { + Stream.concat(Stream.range(1, 100).map((x: Int) => walk(depth-1, bias + x))) + } + } + + def main(args: Array[String]) { + println("Length: " + walk(3, "---").length) + } +} |