我使用流
在scala中编写了以下代码def foo(x: Int) : Stream[Int] = {println("came inside"); (2 * x)} #:: foo(x + 1)
foo(1).takeWhile(_ < 6).toList.foreach(x => println(s"+++ $x"))
这适用于并产生以下输出
came inside
came inside
came inside
+++ 2
+++ 4
但我希望处理过程如
came inside
+++ 2
came inside
+++ 4
came inside
基本上我想逐个处理,直到&lt;的终止条件为止。符合6。我猜它是我的“tolist”方法,它首先创建一个巨大的列表,然后才处理它。
答案 0 :(得分:1)
首先,以更易读的方式格式化代码。然后,删除set.seed(123)
n <- 20
largedat <- data.frame(t1 = runif(n, 1, 10),
x = 1:n,
task = paste('series', 1:n))
largedat$t2 <- largedat$t1 + runif(n, 2, 5)
highchart(hc_opts = list(
chart = list(inverted = 'true')
)) %>%
hc_add_series_df(data = largedat, type = 'columnrange',
group = task,
x = x, low = t1, high = t2) %>%
hc_legend(enabled = FALSE) # disable legend on this one
:它所做的只是将整个流拉入单个变量。这样做会强制计算所有值。由于此时计算了每个值,我们知道&#39;内部&#39; printlns将在&#39; outside&#39;之前执行。那些。您希望将函数的定义(包括它的起始值)存储为延迟评估的值。这应该有效:
toList