有一种模式反复出现,我一直无法完全理解,例如下面的代码来计算isPrime
class S99Int(val start: Int) {
import S99Int._
def isPrime: Boolean =
(start > 1) && (primes takeWhile ( _ <= Math.sqrt(start) ) forall ( start % _ != 0 ))
}
object S99Int {
implicit def int2S99Int(i: Int): S99Int = new S99Int(i)
val primes = Stream.cons(2, Stream.from(3, 2) filter { _.isPrime })
}
import S99Int._
24 isPrime //returns false
我不明白的是:primes
在filter
使用isPrime
中。但是再次def isPrime
使用相同primes
的元素。这不就像一个无限循环,一件事问另一件事,然后那件事又问自己。虽然代码工作完美。