Scala 3 — Book

Given импорты

Language
Эта страница документа относится к Scala 3 и может охватывать новые концепции, недоступные в Scala 2. Если не указано явно, все примеры кода на этой странице предполагают, что вы используете Scala 3.

Для большей ясности, откуда берутся данные в текущей области видимости, для импорта экземпляров given используется специальная форма оператора import. Базовая форма показана в этом примере:

object A:
  class TC
  given tc: TC = ???
  def f(using TC) = ???

object B:
  import A.*       // импорт всех не-given элементов
  import A.given   // импорт экземпляров given

В этом коде предложение import A.* объекта B импортирует все элементы A, кроме given экземпляра tc. И наоборот, второй импорт, import A.given, импортирует только экземпляр given. Два предложения импорта также могут быть объединены в одно:

object B:
  import A.{given, *}

Обсуждение

Селектор с подстановочным знаком * помещает в область видимости все определения, кроме given-ов или расширений, тогда как селектор given помещает в область видимости все given-ы, включая те, которые являются результатом расширений.

Эти правила имеют два основных преимущества:

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

Дополнительные примеры синтаксиса “import given” показаны в главе “Пакеты и импорт”.

Contributors to this page: