উত্তর:
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
) foldLeft জন্য একটি সঁচায়ক মান হিসাবে প্রয়োজনীয়? উদাহরণ - এখানে সংগ্রহকারী হিসাবে 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
এটি আরও মূর্খ।