Примеры использования различных операторов sbt Key

Документации для sbt, похоже, здесь действительно не хватает, поэтому я хотел бы получить окончательный ответ на этот вопрос: в чем разница между "+=", "++=", "‹+=", "‹++" =" и "‹‹=" при работе с ключами?


person Jeff    schedule 15.05.2014    source источник
comment
Не могли бы вы подтвердить утверждение Кажется, документации для sbt здесь действительно не хватает? Как насчет scala-sbt.org/release/ документы/Начало работы/?   -  person Jacek Laskowski    schedule 16.05.2014
comment
Я прочитал всю документацию на веб-сайте sbt, а также приобрел и прочитал версию SBT In Action для MEAP. Общие операторы, такие как :=, += и ++=, хорошо определены, но другие, такие как ‹+= и ‹‹=, — нет. Так что, если вы делаете что-то сверх базовой сборки, не так много указаний.   -  person Jeff    schedule 16.05.2014


Ответы (3)


Вы не можете найти документацию, потому что, как правильно указал @JacekLaskowski, все операторы, кроме +=, ++= и :=, устарели.

Однако вы можете найти Документация, если вы переключитесь на более старую версию sbt.

Однако, если вы застряли на более старой версии, это их значение (из документации):

  • += и ++= добавлять к предыдущему значению, где сначала добавляется один элемент, а затем добавляется Seq
  • ~= преобразует значение, например вы хотите использовать значение, сохраненное в настройке, чтобы получить новую настройку.
  • <<= зависит от другого ключа, например, если вы вызываете organization <<= name, то значение organization равно значению name. Вы можете зависеть от нескольких значений, например. organization <<= (name, version) { (n, v) => /* do something with values */ }
  • <+= и <++= добавляются с зависимости, такие как добавление, но вы можете использовать другое значение параметра для вычисления нового значения

Сказал, что @JacekLaskowski прав, и если вы используете sbt 13.x или выше, вам не нужно использовать эти операторы в пользу макросов.

person lpiepiora    schedule 16.05.2014
comment
Это было то, что я искал, спасибо. Причина, по которой мне нужно было это знать, заключается в том, что в документации для других плагинов для sbt все еще используются устаревшие операторы (например, sbt-native-packager). Поскольку я новичок в sbt и использовал только 0.13+, я никогда не знакомился со старым синтаксисом. Это очень полезно. - person Jeff; 16.05.2014
comment
Эти примечания к выпуску для перехода с 0.12.x очень помогли мне понять, как отказаться от устаревших операторов. - person rbellamy; 29.11.2016

Цитирование Задача v. Настройка ключи:

Говорят, что TaskKey[T] определяет задачу.

Карта sbt, описывающая проект, может содержать фиксированное строковое значение для параметра, такого как name, но она должна содержать некоторый исполняемый код для такой задачи, как compile — даже если этот исполняемый код в конечном итоге возвращает строку, он должен быть каждый раз запускать заново.

Данный ключ всегда относится либо к задаче, либо к простой настройке. То есть «задачность» (будь то перезапускаться каждый раз) — это свойство ключа, а не значения.

Другими словами, настройки неизменяемы и инициализируются при запуске сборки (аналогично vals в Scala), а задачи выполняются каждый раз при их вызове (аналогично defs в Scala).

Цитирование Определение задач и настроек :

Используя :=, вы можете присвоить значение настройке и вычисление задаче. Для параметра значение будет вычисляться один раз во время загрузки проекта. Для задачи вычисление будет выполняться повторно каждый раз при выполнении задачи.

Цитирование Добавление к предыдущим значениям: += и ++=:

Присваивание с помощью := — самое простое преобразование, но у ключей есть и другие методы. Если T в SettingKey[T] является последовательностью, то есть тип значения ключа является последовательностью, вы можете добавить к последовательности, а не заменить ее.

+= добавит один элемент к последовательности. ++= соединит другую последовательность.

Подводя итог, вы должны иметь дело только с := (макрос присваивания), += (макрос добавления) и ++= (макрос конкатенации). Остальные, то есть <<=, <+= и <++=, больше не рекомендуются для обычных случаев использования.

Фактически, все операции могут быть выражены с помощью простого макроса присваивания := (перефразируя готовящуюся книгу SBT в действии< /а>).

Вы действительно уверены, что документации здесь действительно не хватает?! Я сомневаюсь.

person Jacek Laskowski    schedule 15.05.2014
comment
‹‹=, ‹+= и ‹++= — это именно те операторы, которые меня интересуют. Базовые сценарии, требующие только :=, += и ++=, хорошо документированы, а более сложные сборки, требующие более глубокой настройки, — нет. Можете ли вы указать мне какую-либо документацию, в которой описаны эти продвинутые операторы и варианты их использования? Кроме того, где указано, что остальные, то есть ‹‹=, ‹+= и ‹++=, больше не рекомендуются для обычных случаев использования, как вы утверждаете? - person Jeff; 16.05.2014
comment
Я согласен с тем, что трудно найти конкретную информацию в документах sbt, хотя документы со временем значительно улучшились. Может ли быть так, что sbt настолько просто и абстрактно, что невыразимо? Одним словом, без документов? - person som-snytt; 16.05.2014
comment
Свободная цитата взята из книги sbt in Action, и через некоторое время работы с sbt я очень редко сталкивался с необходимостью в других операторах (в основном, когда мне нужно было показать свое понимание sbt :)) - person Jacek Laskowski; 16.05.2014
comment
sbt-web везде использует устаревшие операторы. Итак, чтобы понять, что он делает и как его использовать, нужно знать, что означают эти операторы. А в документации sbt API комментариев ноль. Даже не просроченные. Это очень расстраивает и снижает мою надежду убедить моего босса использовать scala и sbt в наших новых проектах. - person Readren; 26.04.2016
comment
Когда операторы устарели, есть ли какая-либо документация или руководство по переносу, что они означают или как перевести их в используемый в настоящее время синтаксис? - person Suma; 24.05.2016

Когда операторы устарели, есть ли какая-либо документация или руководство по переносу, что они означают или как перевести их в используемый в настоящее время синтаксис?

Вы можете увидеть пример такого перевода в недавних (декабрь 2016 г.) коммитах (в самой scala/scala), например:

Ты увидишь:

-  incOptions <<= (incOptions in LocalProject("root")),
+  incOptions := (incOptions in LocalProject("root")).value,

or

-    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.

person VonC    schedule 26.12.2016