以下はコンパイルされますが、定義が再帰的な性質のため、アクセスすると がfs
生成されます。StackOverflowError
lazy val fs:List[Product] = List(2,3,4).zip(fs.tail)
タイプについてより具体的にしたい場合は、次のようにすることができます。
lazy val fs:List[(Int, (Int, Product))] = List(2,3,4).zip(fs.tail)
タイプは ではありませんNothing
。以下はコンパイルされないため:
scala> lazy val fs:Nothing = List(2,3,4).zip(fs.tail)
<console>:8: error: value tail is not a member of Nothing
lazy val fs:Nothing = List(2,3,4).zip(fs.tail)
List[Nothing]
fsをなどと定義すると、同様の型エラーが発生しますList[(Int, Nothing)]
。したがって、明らかに式の型はList
ofProduct
です。代わりに使用するStream
と、実行時エラーを引き起こさないものを作成できます。
scala> lazy val fs:Stream[Any] = 0 #:: 1 #:: fs.zip(fs.tail).map(p => p:Any)
fs: Stream[Any] = <lazy>
scala> fs take 5 foreach println
0
1
(0,1)
(1,(0,1))
((0,1),(1,(0,1)))