11.27.2014

Scala: error: forward reference extends over definition of value

Scala: Stream の再帰的な定義でエラー

 

自分自身を参照するような Stream を定義したら、エラーが出た。

 

エラーが発生する例

scala> def f(x: Int) = {
     |   val xs: Stream[Int] = x #:: xs.map(_ + 1)
     |   xs.tail
     | }
:17: error: forward reference extends over definition of value xs
         val xs: Stream[Int] = x #:: xs.map(_ + 1)
                                     ^

 

対応方法

lazy val にすれば OK。

scala> def f(x: Int) = {
     |   lazy val xs: Stream[Int] = x #:: xs.map(_ + 1)
     |   xs.tail
     | }
f: (x: Int)scala.collection.immutable.Stream[Int]

scala> f(3).take(10).toList
res8: List[Int] = List(4, 5, 6, 7, 8, 9, 10, 11, 12, 13)

 

 

References

0 件のコメント:

コメントを投稿