小编scr*_*tin的帖子

Scala的Stream和StackOverflowError

考虑这段代码(取自Martin Odersky的" Scala中的函数编程原理 "课程):

def sieve(s: Stream[Int]): Stream[Int] = {
  s.head #:: sieve(s.tail.filter(_ % s.head != 0))
}

val primes = sieve(Stream.from(2))
primes.take(1000).toList
Run Code Online (Sandbox Code Playgroud)

它工作得很好.请注意,sieve事实上它不是尾递归(或者是它?),即使Stream尾部是懒惰的.

但是这段代码:

def sieve(n: Int): Stream[Int] = {
  n #:: sieve(n + 1).filter(_ % n != 0)
}

val primes = sieve(2)
primes.take(1000).toList
Run Code Online (Sandbox Code Playgroud)

抛出StackOverflowError.

第二个例子有什么问题?我filter想搞砸了,但我不明白为什么.它返回一个Stream,所以它不会让评价急切(我是对的吗?)

stack-overflow scala stream lazy-evaluation

6
推荐指数
1
解决办法
1296
查看次数

以编程方式调整 paper.js 画布的大小:未正确重绘超出原始大小的画布部分

示例:https : //jsfiddle.net/gnxdkqgh/5/

  1. 尝试单击x0.5- 一切正常
  2. 尝试单击x2- 超出原始矩形的画布部分未正确重绘
  3. 尝试x2快速连续单击- 您可以看到它绘制了动画虚线,但无法“清除”画布。它只是绘制现有的破折号,从而形成实线。

这是Paper.js 中的错误还是我做错了什么?

我正在使用最新的 Chrome。如果您无法重现问题,请使用以下屏幕截图:

paper.js 画布大小调整错误

paperjs

0
推荐指数
1
解决办法
3098
查看次数

标签 统计

lazy-evaluation ×1

paperjs ×1

scala ×1

stack-overflow ×1

stream ×1