[SCALA] 무기 호는 목록의 마지막에 요구되는 이유는 단점 연산자를 사용하여 구축
SCALA무기 호는 목록의 마지막에 요구되는 이유는 단점 연산자를 사용하여 구축
나는 (스칼라, 제 2 판, Odersky 프로그래밍) 순간에 스칼라를 배우는 중이에요.
단점 연산자를 사용하여 목록을 구축 할 때 우리는 작성해야합니다 :
val l = 1 :: 2 :: 3 :: 4 :: Nil
왜 우리는 무기 호는 마지막에해야합니까? 컴파일러가 이해할 수없는 이유 4는 마지막 요소이며, 그래서 그냥이 대신 쓰기 :
val l = 1 :: 2 :: 3 :: 4
해결법
-
==============================
1.::의 서명은 대략입니다 :
::의 서명은 대략입니다 :
case class ::[E](hd: E, tl: List[E]) extends List[E] // which generates this automatically: object :: { def apply[E](hd: E, tl: List[E]): ::[E] }
무기 호의 서명은 대략입니다 :
object Nil extends List[Nothing]
보시다시피, :: 요소 및 목록을합니다. 무기 호 인 반면 4는 목록이 아닙니다.
-
==============================
2.개념에서, 스칼라의 목록 중 하나입니다
개념에서, 스칼라의 목록 중 하나입니다
:: 헤드 요소와 꼬리 목록과 새 목록을 작성하는 것입니다. 그리고 그것은 바로 연관입니다.
그래서
1 :: 2 :: 3 :: 4 :: Nil
로 컴파일됩니다
1 :: (2 :: (3 :: (4 :: Nil)))
오른쪽에서 시작하여, 첫 번째 목록은 새로운리스트 [4]을 4와 닐로 구성된다. 그러면 새로운리스트 [3,4]을 만들고, 테일리스트 [4]의 선두로 3을 추가. 등등...
귀하의 질문에 대답하기 위해, 스칼라는 1 일 목록을 구성 할 수있는 빈 목록이 필요합니다. 목록이 스칼라에 정의되어 어떻게의 원인이됩니다.
-
==============================
3.사실, 당신은 자신을 작동 할 수 있습니다 :
사실, 당신은 자신을 작동 할 수 있습니다 :
scala> implicit class Listable[A](val value: A) { | def ::[B >: A](other: B): List[B] = other :: value :: Nil | } defined class Listable scala> val xs = 1 :: 2 :: 3 :: 4 xs: List[Int] = List(1, 2, 3, 4) scala> val ys = "A" :: "B" :: "C" ys: List[String] = List(A, B, C) scala>
from https://stackoverflow.com/questions/22881671/why-is-nil-required-at-the-end-of-a-list-built-using-the-cons-operator by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] SBT 0.13.11 프록시 뒤에 종속성을 다운로드 할 수 없습니다 (0) | 2019.11.24 |
---|---|
[SCALA] JTable의에서 JProgressBar가이 업데이트되지 (0) | 2019.11.24 |
[SCALA] 어떻게 단순 무작위 표본 추출 및 아파치 스파크 (스칼라)에서 dataframe SAMPLE 기능 일을? (0) | 2019.11.24 |
[SCALA] ImageIO.write를 사용하여 품질 손실 (0) | 2019.11.24 |
[SCALA] SBT의 DependsOn RootProject는 : 종속성을 컴파일되지 않습니다 (0) | 2019.11.24 |