다음 컴파일에서 발생하는 디버깅하고 싶었을하지만, fs
에 접근하는 것은 생성 StackOverflowError
은 정의가 자연을 재귀하기 때문에 발생합니다.
lazy val fs:List[Product] = List(2,3,4).zip(fs.tail)
우리가 같은 것을 할 수있는 유형에 대한 구체적 싶었다 경우 : typle이 Nothing
하지
lazy val fs:List[(Int, (Int, Product))] = List(2,3,4).zip(fs.tail)
합니다. 다음은 컴파일되지 않기 때문에 :
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]
, List[(Int, Nothing)]
등으로 FS를 정의하는 경우 등 그래서 명확하게 표현의 유형은 Product
의 List
입니다. 내가 그것을 설명하는 것이 가장 정확한 유형이 있다고 생각하지 않습니다
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)))
@ ZoltanHamori 저는 이것이 사실이라고 확신하지 않습니다. 내 대답을 보라. –
나는 아무것도 입력 할 수 없다는 데 동의하고, 그것을 (나는 그것을 시도 했었는데, 언급 했음) 알고 있었다.그 이유는 Nothing이 어떤 유형의 하위 유형이라도 호출 할 수있는 멤버가 없다는 것입니다 (이는 특별한 하위 유형이됩니다). 나는 영원히 반복 할 (또는 스택 오버플로) 무언가의 유형으로 Nothing을 입력하는 것을 의미했습니다. 나는 더 정확 했어야했다. –
예'아무것도 아니지만 특별한 결과는'Nothing'에 결과를 입력 할 수 없다는 이유는 컴파일러에'List'가 필요하고'Nothing'은 아무것도없는'List'가 아니기 때문입니다.) 'Nothing'의 구성원이 무엇인지 할 수 있습니다. –