layout | title | scala3 | partof | overview-name | type | description | language | num | previous-page | next-page | versionSpecific |
---|---|---|---|---|---|---|---|---|---|---|---|
multipage-overview |
Given импорты |
true |
scala3-book |
Scala 3 — Book |
section |
На этой странице показано, как работают операторы импорта 'given' в Scala 3. |
ru |
63 |
ca-context-bounds |
ca-type-classes |
true |
Для большей ясности, откуда берутся данные в текущей области видимости,
для импорта экземпляров 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" показаны в главе ["Пакеты и импорт"][imports].
[imports]: {% link _overviews/scala3-book/packaging-imports.md %}