Given imports

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

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

object B:
  import A.*       // импорт всех non-given членов
  import A.given   // импорт given членов

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

object B:
  import A.{given, *}

Обсуждение

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

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

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


Ссылки: