Skip to content

Latest commit

 

History

History
54 lines (43 loc) · 2.74 KB

ca-given-imports.md

File metadata and controls

54 lines (43 loc) · 2.74 KB
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 %}