복붙노트

[SCALA] 스칼라에서 널 / 아무것도 / 장치의 용도

SCALA

스칼라에서 널 / 아무것도 / 장치의 용도

내가 읽은 바로했습니다 http://oldfashionedsoftware.com/2008/08/20/a-post-about-nothing/

지금까지 내가 이해, 널이 특징이며, 유일한 인스턴스가 null입니다.

방법 널 인수를 사용하는 경우, 우리는 단지 그것이 NULL 인 경우에도, 그것을 (예 : 문자열 = NULL nullString)를 널 레퍼런스 직접 널 아닌 다른 기준을 통과 할 수있다.

난 그냥있는이 널 특성을 사용하는 경우 유용 할 수 있을까. 난 정말 더 이상 예를 참조하지 않는에 대해 아무것도 특성이있다.

난 정말 중 하나를 반환 유형으로 아무것도 및 단위를 사용하지 않고의 차이는 모두가 어떤 결과를 반환하지 않기 때문에, 어떻게 수행 예를 들어 로그인하는 방법이있을 때 사용할 일을 알고, 무엇을 이해하지?

당신이 반환 유형과 다른 무언가로 단위 / 널 / 아무것도의 용도가 있습니까?

해결법

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

    1.방법 결코 반환 (그것을 반환하여 정상적으로 완료 할 수 없습니다 의미, 예외를 던질 수있는) 경우에만 아무것도를 사용하지 않습니다. 아무것도 인스턴스화 및 타입 시스템의 이익을 위해 존재 않습니다 (제임스 Iry을 인용합니다 : "스칼라 유형 매개 변수의 분산을 표현하는 능력에 바닥 형 연결되어있다 이유."). 기사에서 당신은에 연결 :

    방법 결코 반환 (그것을 반환하여 정상적으로 완료 할 수 없습니다 의미, 예외를 던질 수있는) 경우에만 아무것도를 사용하지 않습니다. 아무것도 인스턴스화 및 타입 시스템의 이익을 위해 존재 않습니다 (제임스 Iry을 인용합니다 : "스칼라 유형 매개 변수의 분산을 표현하는 능력에 바닥 형 연결되어있다 이유."). 기사에서 당신은에 연결 :

    귀하의 로깅 방법은 단위를 반환합니다. 실제로 반환 될 수 있도록 값 단위가있다. 은 API 문서에서 :

  2. ==============================

    2.당신이 인용 기사는 오해의 소지가 될 수있다. 널 유형은 자바 가상 머신과의 호환성을 위해 존재하고, 특히 자바.

    당신이 인용 기사는 오해의 소지가 될 수있다. 널 유형은 자바 가상 머신과의 호환성을 위해 존재하고, 특히 자바.

    우리는 스칼라를 고려해야합니다 :

    그러므로 그것은 널 특성이다 NULL 값에 대한 유형을 규정하는 것이 필요하게되고, 그 단지 예로서 null있다.

    당신이 형 시스템 중이거나 컴파일러에 개발하고하지 않으면 널 유형에 특히 유용 아무것도 없다. 당신은 아무것도하지만 널 (null)을 통과 할 수 없기 때문에 특히 나는, 방법에 대한 널 유형 매개 변수를 정의 할 수있는 합리적인 이유를 볼 수 없습니다

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

    3.단위는 다음과 같이 사용할 수 있습니다 :

    단위는 다음과 같이 사용할 수 있습니다 :

    def execute(code: => Unit):Unit = {
      // do something before
      code
      // do something after
    }
    

    이것은 당신이 실행되는 코드의 임의의 블록에 전달할 수 있습니다.

    널은 널 (NULL) 값에 대한 바닥 유형으로 사용될 수 있습니다. 예는 이것이다 :

    implicit def zeroNull[B >: Null] =
        new Zero[B] { def apply = null }
    

    아무것도 없음의 정의에 사용되지 않습니다

    object None extends Option[Nothing]
    

    이것은 아무것도 모든 것을 '확장'때문에 옵션의 모든 유형에 없음을 할당하지 할 수 있습니다.

    val x:Option[String] = None
    
  4. ==============================

    4.당신은 아무것도를 사용하는 경우 수행 할 일이 없습니다 (인쇄 콘솔 포함) 당신이 뭔가를 할 경우, 사용하는 출력 단위를 입력

    당신은 아무것도를 사용하는 경우 수행 할 일이 없습니다 (인쇄 콘솔 포함) 당신이 뭔가를 할 경우, 사용하는 출력 단위를 입력

    object Run extends App {
      //def sayHello(): Nothing = println("hello?")
      def sayHello(): Unit = println("hello?")
      sayHello()
    }
    

    ... 그럼 어떻게 아무것도를 사용할 수 없습니다?

    trait Option[E]
    case class Some[E](value: E) extends Option[E]
    case object None extends Option[Nothing]
    
  5. ==============================

    5.나는 실제로 널 유형을 사용한 적이 있지만 단위를 사용하는 곳이 자바를 사용 무효에서와. 나단은 이미 언급 한 바와 같이, 아무것도의 어떤 인스턴스가있을 수 있기 때문에 아무것도 특별한 유형입니다. 아무는 다른 유형의 서브 타입 인 것이, 소위 보텀 형 수단 없다. 목록 [아무것도]입니다 - - 그리고 목록은 다음이 요소 유형이 될 것입니다 당신은 무기 호에 대한 값을 붙일 수있는 이유 (그리고 contravariant 형식 매개 변수)입니다. 또한 경우 유형 옵션 [아무것도] 해당 사항 없음. 그것은있는 유일한 유효한 방법은 유형의 아무것도의 방법에서 반환하기 때문에 이러한 용기 내부의 값에 액세스하는 모든 시도는 예외가 발생합니다.

    나는 실제로 널 유형을 사용한 적이 있지만 단위를 사용하는 곳이 자바를 사용 무효에서와. 나단은 이미 언급 한 바와 같이, 아무것도의 어떤 인스턴스가있을 수 있기 때문에 아무것도 특별한 유형입니다. 아무는 다른 유형의 서브 타입 인 것이, 소위 보텀 형 수단 없다. 목록 [아무것도]입니다 - - 그리고 목록은 다음이 요소 유형이 될 것입니다 당신은 무기 호에 대한 값을 붙일 수있는 이유 (그리고 contravariant 형식 매개 변수)입니다. 또한 경우 유형 옵션 [아무것도] 해당 사항 없음. 그것은있는 유일한 유효한 방법은 유형의 아무것도의 방법에서 반환하기 때문에 이러한 용기 내부의 값에 액세스하는 모든 시도는 예외가 발생합니다.

  6. ==============================

    6.아무것도 내포 적으로 사용된다. 아래의 코드에서,     발의 B : 부울 = (1> 2), 거짓이면 다른 던져 새로운 RuntimeException을 ( "오류") 다른 절은 부울의 서브 클래스 (뿐만 아니라 다른 AnyVal을)이다 타입 아무것도이다. 다른 절은 정말 아무것도 반환하지 않지만 따라서, 전체 할당, 컴파일러에 유효합니다.

    아무것도 내포 적으로 사용된다. 아래의 코드에서,     발의 B : 부울 = (1> 2), 거짓이면 다른 던져 새로운 RuntimeException을 ( "오류") 다른 절은 부울의 서브 클래스 (뿐만 아니라 다른 AnyVal을)이다 타입 아무것도이다. 다른 절은 정말 아무것도 반환하지 않지만 따라서, 전체 할당, 컴파일러에 유효합니다.

  7. ==============================

    7.여기 scala.predef에서 아무것도의 예입니다 :

    여기 scala.predef에서 아무것도의 예입니다 :

      def ??? : Nothing = throw new NotImplementedError
    

    경우에 당신은 익숙하지 않은 (그리고 그것을 검색 할 수 없습니다 검색 엔진) ??? 아직 구현되지 않은 아무것도 스칼라의 자리 표시 자 기능입니다. 그냥 코 틀린의 TODO있다.

    당신은 모의 객체를 생성 할 때 같은 트릭을 사용할 수 있습니다 : 사용자 정의 NOTUSED 방법으로 사용되지 않는 메소드를 오버라이드 (override). 사용하지 않는 장점 ??? 당신이 구현하려는 않을 것들에 대한 컴파일 경고를 얻을 것입니다.

  8. ==============================

    8.카테고리 이론 아무것도의 관점에서 초기 객체이며, 단위는 터미널 개체입니다.

    카테고리 이론 아무것도의 관점에서 초기 객체이며, 단위는 터미널 개체입니다.

    https://en.wikipedia.org/wiki/Initial_and_terminal_objects

    초기 목적은 coterminal 또는 보편적라고하며, 터미널 객체도 마지막이라고합니다.

    객체가 초기 및 단말 양쪽 인 경우에는 제로 객체 또는 null 오브젝트라고 부른다.

  9. from https://stackoverflow.com/questions/16173477/usages-of-null-nothing-unit-in-scala by cc-by-sa and MIT license