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

分享 |
scala,nil和 List( ) 比较
Scala: Nil vs List()

59 0

在scala中,NilList() 之间是否有任何区别?

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

时间: 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

User unknown 已显示,两个 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
...