Какие вещи вокруг классов дел будут удалены после Scala 2.9? - PullRequest
7 голосов
/ 14 мая 2011

Я знаю, что запланированы некоторые изменения, касающиеся классов дел, например запрет на наследование между ними:

scala> case class Foo()
defined class Foo

scala> case class Bar() extends Foo()
<console>:9: warning: case class `class Bar' has case ancestor `class Foo'.  Case-to-case inheritance has potentially dangerous bugs which are unlikely to be fixed.  You are strongly encouraged to instead use extractors to pattern match on non-leaf nodes.
       case class Bar() extends Foo()
                  ^
defined class Bar

или классов дел без списка параметров (не уверен насчет этого):

scala> case class Foo
<console>:1: warning: case classes without a parameter list have been deprecated;
use either case objects or case classes with `()' as parameter list.
       case class Foo
                     ^
<console>:7: warning: case classes without a parameter list have been deprecated;
use either case objects or case classes with `()' as parameter list.
       case class Foo
                     ^
defined class Foo

Что еще в настоящее время @deprecated?

1 Ответ

8 голосов
/ 15 мая 2011

Каждый класс в Scala должен иметь хотя бы один раздел неявных параметров.Если вы не включите его, компилятор добавит его для вас.

scala> class X
defined class X

scala> new X()
res4: X = X@68003589

scala> class Y
defined class Y

scala> new Y()
res5: Y = Y@467f788b

Классы Case не являются исключением.Но взаимодействие с сопоставлением с образцом является источником путаницы и ошибок, которые мотивируют устаревание.

scala> case class A
<console>:1: warning: case classes without a parameter list have been deprecated;
use either case objects or case classes with `()' as parameter list.
       case class A
                   ^
defined class A

scala> val a = A()
a: A = A()

scala> (a: Any) match { case A => 1; case _ => 2 }
res0: Int = 2

scala> val companion = A
companion: A.type = A

scala> (companion: Any) match { case A => 1; case _ => 2 }
res0: Int = 1

Как предполагает Дин, обычно лучше смоделировать это с объектом case.

IЯ не знаю о временной шкале для удаления поддержки классов случаев со списком пустых параметров.Наследование классов дел было почти удалено в 2.9.0, но это было отложено до следующего основного выпуска.

Дополнительная литература:

Почему первый список параметров класса не может быть неявным?

...