Классы случая в Scala являются стандартными классами, улучшенными с сопоставлением с образцом, равняется... (или я неправильно?). Кроме того, они не требуют никакого "нового" ключевого слова для своего instanciation. Мне кажется, что они более просты определить, чем регулярные классы (или я снова неправильно?).
Существует много веб-страниц, говорящих, где они должны использоваться (главным образом о шаблоне, соответствующем). Но где их нужно избежать? Почему мы не используем их везде?
Существует много мест, где классы корпуса не являются адекватными:
Иногда эти требования представлены поздно в дизайне и требуют, чтобы кто-то преобразовал класс корпуса в нормальный класс. Поскольку преимущества класса Case на самом деле не все, что отлично - помимо немногих особых случаев, которые они были специально сделаны - моя собственная рекомендация - не , чтобы сделать что-либо класс дела, если нет Используйте для этого.
Или, другими словами, не перерабатывайте.
Наследование из классов Case проблематично. Предположим, у вас есть код, как так:
case class Person(name: String) { }
case class Homeowner(address: String,override val name: String)
extends Person(name) { }
scala> Person("John") == Homeowner("1 Main St","John")
res0: Boolean = true
scala> Homeowner("1 Main St","John") == Person("John")
res1: Boolean = false
Возможно, это то, что вы хотите, но обычно Вы хотите A == B если и только если B == a. К сожалению, компилятор не может разумно исправить это для вас автоматически.
Это становится еще хуже, потому что Hashcode человек («Джон»)
не совпадает с Hashcode of домовладельца («1 главный ст», «Джон»)
, Так что теперь равняется действиях странных и HashCode действует странно.
Пока вы знаете, чего ожидать, наследование из классов чехлов может дать понятные результаты, но он пришел к просмотру как плохую форму (и, таким образом, был устарел в 2.8).
Может быть заманчиво использовать классы Case, потому что вы хотите бесплатно ToString / Countail / hashcode. Это может вызвать проблемы, поэтому избегать этого.
Я желаю, чтобы возникла аннотация, которая позволила вам получить эти удобные вещи, не делая класс дела, но, возможно, это сложнее, чем звучит.
Я бы сказал, что это сумасшедшее количество параметров, которые должны быть введены.
Стремиться к одному параметру, возможно, 2 больше всего, что находится почти все возможные сценарии , и, конечно, должен быть интерфейс. Любое больше, и я чувствую запах крысы (дизайнерский недостаток).
-121--1143758-Одним из недостаток, который упоминается в программирование в Scala , заключается в том, что из-за вещей, автоматически сгенерированных для классов корпуса, объекты становятся больше, чем для нормальных классов, так что если эффективность памяти Важно, вы можете использовать обычные классы.