95 可读性
 将光标移到文章中的句子上,可以查看原文。 显示译文      显示原文      双语对照

分享 |
scala,nil和 List( ) 比较

59 0

在 Scala 中,NilList() 之间有什么区别?

如果不是,哪一种更适合 Scala 风格? 在空列表中创建新的空列表和模式匹配。

时间: 15年08月06日 原作者: Bart

84 0

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


Nil更具惯用性,在大多数情况下是首选的。 问题?

发布时间: 15年08月06日 原作者: user unknown
55 0

用户未知的显示 NilList()的运行时间值相同。 但是,它们的静态类型不是:


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) ^


发布时间: 15年08月06日 原作者: Daniel C. Sobral
16 0

用户的答案显示,他们是相同的对象。

Idiomatically Nil应该是首选的,因为它很好。 但是有一个例外:如果出于任何原因需要显式类型,我认为

 
List[Foo]() 
 

要比

 
Nil : List[Foo]

 

发布时间: 15年08月06日 原作者: James Iry
...