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, включая те, которые являются результатом расширений.
Эти правила имеют два основных преимущества:
- понятнее, откуда берутся данные в текущей области видимости. В частности, невозможно скрыть импортированные givens в длинном списке других импортов.
- есть возможность импортировать все given, не импортируя ничего другого. Это важно, потому что givens могут быть анонимными, поэтому обычное использование именованного импорта нецелесообразно.
Дополнительные примеры синтаксиса "import given" показаны в главе "Пакеты и импорт".
Ссылки: