Pourquoi les classes de cas sans liste de parameters étaient-elles obsolètes?

Pourquoi les classes de cas sans liste de parameters sont-elles obsolètes de Scala? Et pourquoi le compilateur suggère-t-il d’utiliser () comme liste de parameters à la place?

MODIFIER :

Quelqu’un s’il vous plaît répondez à ma deuxième question …: |

Il est vraiment facile d’utiliser accidentellement une classe de cas non-arg en tant que motif.

 scala> case class Foo warning: there were deprecation warnings; re-run with -deprecation for details defined class Foo scala> (new Foo: Any) match { case Foo => true; case _ => false } res10: Boolean = false 

Au lieu de:

 scala> (new Foo: Any) match { case _: Foo => true; case _ => false } res11: Boolean = true 

Ou mieux:

 scala> case object Bar defined module Bar scala> (Bar: Any) match { case Bar => true; case _ => false } res12: Boolean = true 

UPDATE Espérons que la transcription ci-dessous montrera pourquoi une liste de parameters vide est préférée à la liste de parameters manquante obsolète.

 scala> case class Foo() // Using an empty parameter list rather than zero parameter lists. defined class Foo scala> Foo // Access the companion object Foo res0: Foo.type =  scala> Foo() // Call Foo.apply() to construct an instance of class Foo res1: Foo = Foo() scala> case class Bar warning: there were deprecation warnings; re-run with -deprecation for details defined class Bar scala> Bar // You may expect this to construct a new instance of class Bar, but instead // it references the companion object Bar res2: Bar.type =  scala> Bar() // This calls Bar.apply(), but is not symmesortingcal with the class definition. res3: Bar = Bar() scala> Bar.apply // Another way to call Bar.apply res4: Bar = Bar() 

Un object case est généralement toujours préférable à une liste de parameters vide.

Sans parameters, chaque instance de la classe de cas est impossible à distinguer et est donc essentiellement une constante. Utilisez un object pour ce cas.