Варианты использования для разных операторов ключа sbt
Документация для sbt, похоже, действительно отсутствует здесь, поэтому я хотел бы получить окончательный ответ на это: в чем разница между "+ =", "++ =", "< + =", "< ++ =" и "< = =" при работе с ключами?
Ответы
Ответ 1
Вы не можете найти документацию, так как @JacekLaskowski правильно указал все операторы, кроме +=
, ++=
и :=
устарели.
Однако вы можете найти Документацию, если вы перейдете к более старой версии sbt.
Если вы, однако, придерживаетесь более старой версии, это их значение (через документацию):
-
+=
и ++=
добавить к предыдущему значению, где сначала добавляет один элемент, а затем добавляет Seq
-
~=
преобразует значение, например. вы хотите использовать значение, сохраненное в настройке, чтобы получить новую настройку.
-
<<=
зависит от другого ключа, например, если вы вызываете organization <<= name
, то значение organization
равно значению name
. Вы можете зависеть от нескольких значений, например. organization <<= (name, version) { (n, v) => /* do something with values */ }
-
<+=
и <++=
являются добавлением зависимостей, например append, но вы можете использовать другое значение параметра для вычисления нового значения
Сказал, что @JacekLaskowski прав, и если вы используете sbt 13.x или выше, вам не придется использовать эти операторы в предпочтениях макросов.
Ответ 2
Цитирование Задача v. Установка ключей:
Говорят, что A TaskKey[T]
определяет задачу.
Карта sbt, описывающая проект, может поддерживать фиксированное строковое значение для параметра, такого как name
, но он должен поддерживать некоторые исполняемые файлы код для задачи, такой как compile
- даже если этот исполняемый код в конечном итоге возвращает строку, ее нужно повторно запускать каждый раз.
Данный ключ всегда относится либо к задаче, либо к простой настройке. Что является "задачей" (независимо от того, следует ли повторно запускать каждый раз) является свойством а не значение.
Другими словами, настройки неизменяемы и инициализируются при запуске сборки (аналогично val
в Scala), тогда как задачи выполняются каждый раз, когда они вызывают (аналогично def
в Scala).
Цитата Определение задач и настроек:
Используя :=
, вы можете присвоить значение настройке и вычислять задача. Для параметра значение будет вычислено один раз при загрузке проекта время. Для задачи вычисление будет повторно запускаться каждый раз, когда задача выполняется.
Цитирование Добавление к предыдущим значениям: + = и ++ =:
Назначение с помощью :=
является самым простым преобразованием, но ключи имеют другие методы. Если T
in SettingKey[T]
является последовательностью, то есть ключевой тип значения - последовательность, вы можете добавить к последовательности, а чем заменить его.
+=
добавит в последовательность один элемент. ++=
будет конкатенировать другую последовательность.
Объединяя его, вы должны иметь дело только с :=
(макросом назначения), +=
(макрос добавления) и ++=
(макрос конкатенации). Оставшиеся, т.е. <<=
, <+=
и <++=
, больше не рекомендуются для случаев общего использования.
Фактически все операции могут быть выражены с помощью простого макроса назначения :=
(перефразируя предстоящую книгу SBT в действии).
Вы действительно уверены, что документы "действительно отсутствуют здесь"?! Я сомневаюсь.
Ответ 3
Когда операторы устарели, существует ли какая-либо документация или руководство по переносу, что они означают или как перевести их в используемый в настоящее время синтаксис?
Вы можете видеть, что пример такого перевода в последнее время (декабрь 2016 года) совершает (в scala/scala), например:
Вы увидите:
- incOptions <<= (incOptions in LocalProject("root")),
+ incOptions := (incOptions in LocalProject("root")).value,
или
- packagedArtifact in (Compile, packageBin) <<= (artifact in (Compile, packageBin), bundle).identityMap,
+ packagedArtifact in (Compile, packageBin) := (((artifact in (Compile, packageBin)).value, bundle.value)),
Вы можете увидеть больше об отказе от этих операторов в sbt PR 2711, sbt PR 2716 и sbt/notes/0.13.13/ops_deprecation.md
.