복붙노트

[SCALA] 무기 호는 목록의 마지막에 요구되는 이유는 단점 연산자를 사용하여 구축

SCALA

무기 호는 목록의 마지막에 요구되는 이유는 단점 연산자를 사용하여 구축

나는 (스칼라, 제 2 판, Odersky 프로그래밍) 순간에 스칼라를 배우는 중이에요.

단점 연산자를 사용하여 목록을 구축 할 때 우리는 작성해야합니다 :

val l = 1 :: 2 :: 3 :: 4 :: Nil

왜 우리는 무기 호는 마지막에해야합니까? 컴파일러가 이해할 수없는 이유 4는 마지막 요소이며, 그래서 그냥이 대신 쓰기 :

val l = 1 :: 2 :: 3 :: 4

해결법

  1. ==============================

    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. ==============================

    2.개념에서, 스칼라의 목록 중 하나입니다

    개념에서, 스칼라의 목록 중 하나입니다

    :: 헤드 요소와 꼬리 목록과 새 목록을 작성하는 것입니다. 그리고 그것은 바로 연관입니다.

    그래서

    1 :: 2 :: 3 :: 4 :: Nil 
    

    로 컴파일됩니다

    1 :: (2 :: (3 :: (4 :: Nil)))
    

    오른쪽에서 시작하여, 첫 번째 목록은 새로운리스트 [4]을 4와 닐로 구성된다. 그러면 새로운리스트 [3,4]을 만들고, 테일리스트 [4]의 선두로 3을 추가. 등등...

    귀하의 질문에 대답하기 위해, 스칼라는 1 일 목록을 구성 할 수있는 빈 목록이 필요합니다. 목록이 스칼라에 정의되어 어떻게의 원인이됩니다.

  3. ==============================

    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>
    
  4. 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