Spec-Zone.ru › Scala 3.2

Класс newMain.newMain

Объект-компаньон • Исходный код

final class newMain extends MainAnnotation[FromString, Any]

Аннотация, которая обозначает главную функцию. Главные функции являются точками входа для программ Scala. Их можно вызвать через командную строку, используя команду scala, после чего следует их имя и, необязательно, их параметры.

Параметры главной функции могут иметь любой тип T, при условии, что в области видимости существует given util.CommandLineParser.FromString[T] для парсинга строки, введенной в качестве входных данных, в правильный тип аргумента. Для этих типов уже определены парсеры:

  • String,
  • Boolean,
  • Byte, Short, Int, Long, Float, Double.

Параметры главной функции могут передаваться либо по позиции, либо по имени. Передача аргумента по позиции означает, что вы передаёте аргументы в том же порядке, что и в сигнатуре функции. Передача аргумента по имени означает, что вы указываете аргумент сразу после его имени. Рассмотрим функцию @newMain def foo(i: Int, str: String), у которой аргументы могут быть переданы:

  • по позиции: scala foo 1 abc,
  • по имени: scala foo -i 1 --str abc или scala foo --str abc -i 1.

Возможна также смесь обоих способов: scala foo --str abc 1 эквивалентно всем предыдущим примерам.

Обратите внимание, что перегрузка функций main в настоящее время не поддерживается, т.е. вы не можете определить две главные функции с одинаковыми именами в одном проекте.

Используются специальные аргументы для отображения справки по главной функции: --help и -h. Если они используются в качестве аргументов, программа отобразит полезную информацию о главной функции. Эта справка напрямую использует комментарий ScalaDoc, связанный с функцией, точнее её описание и описание параметров, документированные с помощью @param. Обратите внимание, что если параметр называется help или h, или если у одного из параметров есть псевдоним, совпадающий с одним из этих имён, отображение справки по этому аргументу будет отключено. Например, для @newMain def foo(help: Boolean), scala foo -h будет отображать справку, но scala foo --help не сработает, так как он ожидает значение Boolean после --help.

Параметры могут быть снабжены аннотациями для добавления функциональности к главной функции:

  • main.alias добавляет другие имена параметру. Например, если параметр node имеет псевдонимы otherNode и n, к нему можно обратиться, используя --node, --otherNode или -n.

Вот пример главной функции с аннотированными параметрами: @newMain def foo(@newMain.alias("x") number: Int, @newMain.alias("explanation") s: String). Следующие команды эквивалентны:

  • scala foo --number 1 -s abc
  • scala foo -x 1 -s abc
  • scala foo --number 1 --explanation abc
  • scala foo -x 1 --explanation abc

Булевы параметры рассматриваются как флаги, для которых не требуется передавать значение «true» или «false». Например, @newMain def foo(i: Boolean) может быть вызван как foo (где i=false) или foo -i (где i=true).

Специальный маркер -- может быть использован для указания, что все последующие аргументы передаются дословно как позиционные параметры. Например, @newMain def foo(args: String*) может быть вызван как scala foo a b -- -c -d, что подразумевает args=Seq("a", "b", "-c", "-d").

Суперобъекты
Трейт MainAnnotation[FromString, Any]
Трейт StaticAnnotation
Класс Annotation
Класс Object
Трейт Matchable
Класс Any

Конкретные методы

Исходный код
def argGetter[T](param: Parameter, arg: String, defaultArgument: Option[() => T])(using p: FromString[T]): () => T

Получатель idx-го аргумента типа T

Параметры-значения
defaultArgument

Необязательная лямбда для создания значения по умолчанию

idx

Индекс аргумента

Исходный код
def command(info: Info, args: Seq[String]): Option[Seq[String]]

Обработка аргументов команды перед их парсингом.

Возвращает Some последовательности аргументов, которые будут обработаны для передачи в главную функцию. Эта последовательность должна иметь такую же длину, как и количество параметров главной функции (т.е. info.parameters.size). Если есть параметр varargs, то последовательность должна быть длиной не менее info.parameters.size - 1.

Возвращает None если аргументы неверны, и парсинг и выполнение должны быть остановлены.

Параметры-значения
args

Аргументы командной строки

info

Информация о команде (имя, документация и информация о параметрах)

Исходный код
def run(execProgram: () => Any): Unit

Выполнить program если все аргументы валидны

Параметры-значения
program

Функция, содержащая вызов главной функции и инициализацию её аргументов

Исходный код
def varargGetter[T](param: Parameter, args: Seq[String])(using p: FromString[T]): () => Seq[T]

Получатель для аргумента varargs типа T*

© 2002-2022 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://scala-lang.org/api/3.2.0/scala/annotation/newMain.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API