Варианты использования для разных операторов ключа 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.