2
还有就是重新出现一次又一次的一个模式,我一直没能完全理解它,例如下面的code计算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
来取元素。难道它不像一个事物问一个问题,然后又是一个单一问题的无限循环。尽管代码完美无缺。
有关类似问题,请参阅http://stackoverflow.com/questions/15594227/calculating-prime-numbers-in-scala-how-does-this-code-work。 – sschaef 2013-04-22 19:30:52