[SCALA] 스칼라 : 목록 대 무기 호 ()
SCALA스칼라 : 목록 대 무기 호 ()
스칼라에서 무기 호 및 목록 () 사이에 전혀 차이가 있습니까?
하나 더 관용적 스칼라 스타일이다, 그렇지 않다면? 모두 빈 목록에 새로운 빈 목록 및 패턴 매칭을 만들기위한.
해결법
-
==============================
1.
scala> println (Nil == List()) true scala> println (Nil eq List()) true scala> println (Nil equals List()) true scala> System.identityHashCode(Nil) 374527572 scala> System.identityHashCode(List()) 374527572
무기 호는 더 관용적이며, 대부분의 경우에 선호 될 수있다. 질문이 있으십니까?
-
==============================
2.사용자 알려지지는 무기 호 및 목록 () 모두의 런타임 값이 동일하다는 것을 보여 주었다. 그러나, 그들의 정적 유형은되지 않습니다 :
사용자 알려지지는 무기 호 및 목록 () 모두의 런타임 값이 동일하다는 것을 보여 주었다. 그러나, 그들의 정적 유형은되지 않습니다 :
scala> val x = List() x: List[Nothing] = List() scala> val y = Nil y: scala.collection.immutable.Nil.type = List() scala> def cmpTypes[A, B](a: A, b: B)(implicit ev: A =:= B = null) = if (ev eq null) false else true cmpTypes: [A, B](a: A, b: B)(implicit ev: =:=[A,B])Boolean scala> cmpTypes(x, y) res0: Boolean = false scala> cmpTypes(x, x) res1: Boolean = true scala> cmpTypes(y, y) res2: Boolean = true
이 같은 배의 누적 같이 유형을 추론하는 데 사용되는 경우에 특히 중요하다 :
scala> List(1, 2, 3).foldLeft(List[Int]())((x, y) => y :: x) res6: List[Int] = List(3, 2, 1) scala> List(1, 2, 3).foldLeft(Nil)((x, y) => y :: x) <console>:10: error: type mismatch; found : List[Int] required: scala.collection.immutable.Nil.type List(1, 2, 3).foldLeft(Nil)((x, y) => y :: x) ^
-
==============================
3.사용자 불명의 대답 쇼, 그들은 동일한 개체입니다.
사용자 불명의 대답 쇼, 그들은 동일한 개체입니다.
그것은 좋은 짧기 때문에 관용구 무기 호 선호한다. 하지만 예외가있다 : 명시 적 유형이 내가 생각하는 어떤 이유에서 필요한 경우
List[Foo]()
보다 좋네요
Nil : List[Foo]
from https://stackoverflow.com/questions/5981850/scala-nil-vs-list by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 삼항 연산자 유사하려면? (0) | 2019.11.26 |
---|---|
[SCALA] 스칼라 2.10 + JSON 직렬화 및 역 직렬화 (0) | 2019.11.25 |
[SCALA] 스칼라에서 영구 데이터 구조 (0) | 2019.11.25 |
[SCALA] 세트, 펑 및 식의 혼란 (0) | 2019.11.25 |
[SCALA] 지도 운영에 튜플 포장 풀기 (0) | 2019.11.25 |