Эта страница документа относится к 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:
Contents
- Введение
- Возможности Scala
- Почему Scala 3?
- Почувствуй Scala
- Пример 'Hello, World!'
- REPL
- Переменные и типы данных
- Структуры управления
- Моделирование данных
- Методы
- Функции первого класса
- Одноэлементные объекты
- Коллекции
- Контекстные абстракции
- Верхнеуровневые определения
- Обзор
- Первый взгляд на типы
- Интерполяция строк
- Структуры управления
- Моделирование предметной области
- Инструменты
- Моделирование ООП
- Моделирование ФП
- Методы
- Особенности методов
- Main методы в Scala 3
- Обзор
- Функции
- Анонимные функции
- Параметры функции
- Eta расширение
- Функции высшего порядка
- Собственный map
- Создание метода, возвращающего функцию
- Обзор
- Пакеты и импорт
- Коллекции в Scala
- Типы коллекций
- Методы в коллекциях
- Обзор
- Функциональное программирование
- Что такое функциональное программирование?
- Неизменяемые значения
- Чистые функции
- Функции — это значения
- Функциональная обработка ошибок
- Обзор
- Типы и система типов
- Определение типов
- Параметризованные типы
- Пересечение типов
- Объединение типов
- Алгебраические типы данных
- Вариантность
- Непрозрачные типы
- Структурные типы
- Зависимые типы функций
- Другие типы
- Контекстные абстракции
- Методы расширения
- Параметры контекста
- Контекстные границы
- Given импорты
- Классы типов
- Многостороннее равенство
- Неявное преобразование типов
- Обзор
- Параллелизм
- Scala утилиты
- Сборка и тестирование проектов Scala с помощью Sbt
- Рабочие листы
- Взаимодействие с Java