[SCALA] 스칼라에서 널 / 아무것도 / 장치의 용도
SCALA스칼라에서 널 / 아무것도 / 장치의 용도
내가 읽은 바로했습니다 http://oldfashionedsoftware.com/2008/08/20/a-post-about-nothing/
지금까지 내가 이해, 널이 특징이며, 유일한 인스턴스가 null입니다.
방법 널 인수를 사용하는 경우, 우리는 단지 그것이 NULL 인 경우에도, 그것을 (예 : 문자열 = NULL nullString)를 널 레퍼런스 직접 널 아닌 다른 기준을 통과 할 수있다.
난 그냥있는이 널 특성을 사용하는 경우 유용 할 수 있을까. 난 정말 더 이상 예를 참조하지 않는에 대해 아무것도 특성이있다.
난 정말 중 하나를 반환 유형으로 아무것도 및 단위를 사용하지 않고의 차이는 모두가 어떤 결과를 반환하지 않기 때문에, 어떻게 수행 예를 들어 로그인하는 방법이있을 때 사용할 일을 알고, 무엇을 이해하지?
당신이 반환 유형과 다른 무언가로 단위 / 널 / 아무것도의 용도가 있습니까?
해결법
-
==============================
1.방법 결코 반환 (그것을 반환하여 정상적으로 완료 할 수 없습니다 의미, 예외를 던질 수있는) 경우에만 아무것도를 사용하지 않습니다. 아무것도 인스턴스화 및 타입 시스템의 이익을 위해 존재 않습니다 (제임스 Iry을 인용합니다 : "스칼라 유형 매개 변수의 분산을 표현하는 능력에 바닥 형 연결되어있다 이유."). 기사에서 당신은에 연결 :
방법 결코 반환 (그것을 반환하여 정상적으로 완료 할 수 없습니다 의미, 예외를 던질 수있는) 경우에만 아무것도를 사용하지 않습니다. 아무것도 인스턴스화 및 타입 시스템의 이익을 위해 존재 않습니다 (제임스 Iry을 인용합니다 : "스칼라 유형 매개 변수의 분산을 표현하는 능력에 바닥 형 연결되어있다 이유."). 기사에서 당신은에 연결 :
귀하의 로깅 방법은 단위를 반환합니다. 실제로 반환 될 수 있도록 값 단위가있다. 은 API 문서에서 :
-
==============================
2.당신이 인용 기사는 오해의 소지가 될 수있다. 널 유형은 자바 가상 머신과의 호환성을 위해 존재하고, 특히 자바.
당신이 인용 기사는 오해의 소지가 될 수있다. 널 유형은 자바 가상 머신과의 호환성을 위해 존재하고, 특히 자바.
우리는 스칼라를 고려해야합니다 :
그러므로 그것은 널 특성이다 NULL 값에 대한 유형을 규정하는 것이 필요하게되고, 그 단지 예로서 null있다.
당신이 형 시스템 중이거나 컴파일러에 개발하고하지 않으면 널 유형에 특히 유용 아무것도 없다. 당신은 아무것도하지만 널 (null)을 통과 할 수 없기 때문에 특히 나는, 방법에 대한 널 유형 매개 변수를 정의 할 수있는 합리적인 이유를 볼 수 없습니다
-
==============================
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.당신은 아무것도를 사용하는 경우 수행 할 일이 없습니다 (인쇄 콘솔 포함) 당신이 뭔가를 할 경우, 사용하는 출력 단위를 입력
당신은 아무것도를 사용하는 경우 수행 할 일이 없습니다 (인쇄 콘솔 포함) 당신이 뭔가를 할 경우, 사용하는 출력 단위를 입력
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.나는 실제로 널 유형을 사용한 적이 있지만 단위를 사용하는 곳이 자바를 사용 무효에서와. 나단은 이미 언급 한 바와 같이, 아무것도의 어떤 인스턴스가있을 수 있기 때문에 아무것도 특별한 유형입니다. 아무는 다른 유형의 서브 타입 인 것이, 소위 보텀 형 수단 없다. 목록 [아무것도]입니다 - - 그리고 목록은 다음이 요소 유형이 될 것입니다 당신은 무기 호에 대한 값을 붙일 수있는 이유 (그리고 contravariant 형식 매개 변수)입니다. 또한 경우 유형 옵션 [아무것도] 해당 사항 없음. 그것은있는 유일한 유효한 방법은 유형의 아무것도의 방법에서 반환하기 때문에 이러한 용기 내부의 값에 액세스하는 모든 시도는 예외가 발생합니다.
나는 실제로 널 유형을 사용한 적이 있지만 단위를 사용하는 곳이 자바를 사용 무효에서와. 나단은 이미 언급 한 바와 같이, 아무것도의 어떤 인스턴스가있을 수 있기 때문에 아무것도 특별한 유형입니다. 아무는 다른 유형의 서브 타입 인 것이, 소위 보텀 형 수단 없다. 목록 [아무것도]입니다 - - 그리고 목록은 다음이 요소 유형이 될 것입니다 당신은 무기 호에 대한 값을 붙일 수있는 이유 (그리고 contravariant 형식 매개 변수)입니다. 또한 경우 유형 옵션 [아무것도] 해당 사항 없음. 그것은있는 유일한 유효한 방법은 유형의 아무것도의 방법에서 반환하기 때문에 이러한 용기 내부의 값에 액세스하는 모든 시도는 예외가 발생합니다.
-
==============================
6.아무것도 내포 적으로 사용된다. 아래의 코드에서, 발의 B : 부울 = (1> 2), 거짓이면 다른 던져 새로운 RuntimeException을 ( "오류") 다른 절은 부울의 서브 클래스 (뿐만 아니라 다른 AnyVal을)이다 타입 아무것도이다. 다른 절은 정말 아무것도 반환하지 않지만 따라서, 전체 할당, 컴파일러에 유효합니다.
아무것도 내포 적으로 사용된다. 아래의 코드에서, 발의 B : 부울 = (1> 2), 거짓이면 다른 던져 새로운 RuntimeException을 ( "오류") 다른 절은 부울의 서브 클래스 (뿐만 아니라 다른 AnyVal을)이다 타입 아무것도이다. 다른 절은 정말 아무것도 반환하지 않지만 따라서, 전체 할당, 컴파일러에 유효합니다.
-
==============================
7.여기 scala.predef에서 아무것도의 예입니다 :
여기 scala.predef에서 아무것도의 예입니다 :
def ??? : Nothing = throw new NotImplementedError
경우에 당신은 익숙하지 않은 (그리고 그것을 검색 할 수 없습니다 검색 엔진) ??? 아직 구현되지 않은 아무것도 스칼라의 자리 표시 자 기능입니다. 그냥 코 틀린의 TODO있다.
당신은 모의 객체를 생성 할 때 같은 트릭을 사용할 수 있습니다 : 사용자 정의 NOTUSED 방법으로 사용되지 않는 메소드를 오버라이드 (override). 사용하지 않는 장점 ??? 당신이 구현하려는 않을 것들에 대한 컴파일 경고를 얻을 것입니다.
-
==============================
8.카테고리 이론 아무것도의 관점에서 초기 객체이며, 단위는 터미널 개체입니다.
카테고리 이론 아무것도의 관점에서 초기 객체이며, 단위는 터미널 개체입니다.
https://en.wikipedia.org/wiki/Initial_and_terminal_objects
초기 목적은 coterminal 또는 보편적라고하며, 터미널 객체도 마지막이라고합니다.
객체가 초기 및 단말 양쪽 인 경우에는 제로 객체 또는 null 오브젝트라고 부른다.
from https://stackoverflow.com/questions/16173477/usages-of-null-nothing-unit-in-scala by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라 : 하나의 문에서 파일에 쓰기 문자열 (0) | 2019.11.10 |
---|---|
[SCALA] 왜 스칼라 목록 당 모두 여러 매개 변수 목록과 여러 매개 변수를 제공합니까? [복제] (0) | 2019.11.10 |
[SCALA] 어떻게 스칼라 변수를 캐스팅 하는가? (0) | 2019.11.10 |
[SCALA] 스칼라 : 어떻게 동적 객체와 반사를 사용하여 메서드 Invoke를 인스턴스화합니까? (0) | 2019.11.10 |
[SCALA] 어떻게 스파크 2.0에서 단위 테스트를 작성하는? (0) | 2019.11.10 |