Имеет ли смысл AnyVal с AnyRef в качестве параметра в Scala? - PullRequest
0 голосов
/ 16 апреля 2019

Имеет ли смысл приведенная ниже конструкция? Есть ли какие-то преимущества от его использования?

final case class Id(uuid: UUID) extends AnyVal

Как я понимаю выше, конструкция Id не требуется создавать в некоторых сценариях, описанных здесь . Но у меня есть некоторые сомнения, потому что я не нашел ни одного примера с AnyRef в качестве параметра.

1 Ответ

0 голосов
/ 17 апреля 2019

Да, этот пример имеет смысл. Расширение AnyVal полезно, когда вам нужна определенная семантика для типа, но вы не хотите оплачивать дополнительные затраты на выделение, которые идут вместе с ним. Например, допустим, у вас есть экземпляр класса типов для вывода строкового представления значений, например Show[A], и вы хотите присвоить определенную семантику UUID, но в области уже существует экземпляр Show[UUID], который вы не можете control, это может быть полезно при переносе типа и введении для него неявного класса типов.

Обратите внимание, что AnyVal может в конечном итоге выделить экземпляры класса-оболочки в определенных случаях, как указано в этой документации :

Класс значения фактически создается, когда:

  • класс значений рассматривается как другой тип.
  • класс значений назначен массиву.
  • выполнение тестов типов во время выполнения, таких как сопоставление с образцом.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...