很酷,不是吗?我没说大话,stream比数组的功能更强大。现在,请容忍我几分钟,让我来多介绍一点关于stream的事情。你可以使用 new Stream() 来创建一个空的stream,用 new Stream( head, functionReturningTail ) 来创建一个非空的stream。对于这个非空的stream,你传入的第一个参数成为这个stream的头元素,而第二个参数是一个函数,它返回stream的尾部(一个包含有余下所有元素的stream),很可能是一个空的stream。困惑吗?让我们来看一个例子:
- var s = new Stream( 10, function () {
- return new Stream();
- } );
- // the head of the s stream is 10; the tail of the s stream is the empty stream
- s.print(); // prints 10
- var t = new Stream( 10, function () {
- return new Stream( 20, function () {
- return new Stream( 30, function () {
- return new Stream();
- } );
- } );
- } );
- // the head of the t stream is 10; its tail has a head which is 20 and a tail which
- // has a head which is 30 and a tail which is the empty stream.
- t.print(); // prints 10, 20, 30
很酷,不是吗?我没说大话,stream比数组的功能更强大。现在,请容忍我几分钟,让我来多介绍一点关于stream的事情。你可以使用 new Stream() 来创建一个空的stream,用 new Stream( head, functionReturningTail ) 来创建一个非空的stream。对于这个非空的stream,你传入的第一个参数成为这个stream的头元素,而第二个参数是一个函数,它返回stream的尾部(一个包含有余下所有元素的stream),很可能是一个空的stream。困惑吗?让我们来看一个例子:
- function ones() {
- return new Stream(
- // the first element of the stream of ones is 1...
- 1,
- // and the rest of the elements of this stream are given by calling the function ones() (this same function!)
- ones
- );
- }
- var s = ones(); // now s contains 1, 1, 1, 1, ...
- s.take( 3 ).print(); // prints 1, 1, 1