जवाबों:
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
नील अधिक मुहावरेदार है और ज्यादातर मामलों में पसंद किया जा सकता है। प्रशन?
List[A]()
(नहीं Nil
)? उदाहरण - यहाँ संचायक के रूप में scala> Map(1 -> "hello", 2 -> "world").foldLeft(List[String]())( (acc, el) => acc :+ el._2) res1: List[String] = List(hello, world)
उपयोग Nil
करने से काम नहीं चलेगा।
Map(1 -> "hello", 2 -> "world").foldLeft(Nil: List[String])( _ :+ _._2)
उपयोगकर्ता अज्ञात ने दिखाया है कि दोनों का रन टाइम मूल्य Nil
और List()
समान है। हालाँकि, उनका स्थिर प्रकार नहीं है:
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)
^
y :: x
करता है । समस्या यह है कि यह जिस प्रकार का रिटर्न देता है वह अपेक्षित प्रकार नहीं है। यह लौटता है List[Int]
, जबकि अपेक्षित प्रकार List[Nothing]
या तो है Nil.type
( या मुझे लगता है कि पूर्व, लेकिन शायद बाद वाला)।
जैसा कि उपयोगकर्ता अज्ञात जवाब दिखाता है, वे एक ही वस्तु हैं।
आदर्श रूप से निल को पसंद किया जाना चाहिए क्योंकि यह अच्छा और छोटा है। हालांकि एक अपवाद है: अगर मुझे लगता है कि जो भी कारण के लिए एक स्पष्ट प्रकार की आवश्यकता है
List[Foo]()
से अच्छा है
Nil : List[Foo]
List.empty[Foo]
तीसरे विकल्प के रूप में भी है ।
Nil
अधिक मुहावरेदार है।