2014-04-01 5 views
4

Данные методы are not described in the documentation. Я в основном использую := в моих .sbt-файлах, но иногда из-за причин, которые я еще не понимаю, задачи, которые я назначаю с помощью :=, не работают (это означает, что задачи не производят побочных эффектов и ничего не возвращают) , и работать с <<=. Так в чем разница между <<= и :=?SBT, разница между << = и: =

Edit:

Мой пример ниже выполняет задачу очистки, и, когда это делается (doFinally), работает две другие задачи одновременно.

gae_prep_war := { 
    val after = Def.task { 
    (gae_copyJars).value; (compile in Compile).value; 
    } 
    (gae_clean, after) { 
    (clean, task) => clean doFinally task 
    } 
} 

Как сейчас, это не сработало, не было ошибок, но никакого эффекта или выхода не было; если я меняю := на <<=, он работает. Моя версия SBT равна 0.13.0 и использует Scala 2.10.2.

Edit2:

Я обнаружил, что := работает, если я просто добавить .value к внешнему выражению:

gae_prep_war := { 
    val after = Def.task { 
    (gae_copyJars).value; (compile in Compile).value; 
    } 
    (gae_clean, after) { 
    (clean, task) => clean doFinally task 
    } 
}.value 

^

Но я до сих пор не совсем понимаю, почему ...

+0

Если вы покажете нам свою попытку использовать ': =' с задачей, я думаю, мы можем сказать вам, что вы делаете неправильно. –

+0

@SethTisue Я обновил свой вопрос на примере. –

+2

': =' ожидает, что с правой стороны будет использоваться '.value', чтобы фактически оценить любые задачи или настройки, которые он упоминает. В вашем случае все, что находится между внешним '{}', просто описывает задачу; '.value' фактически запускает его, и результат становится результатом' gae_prep_war'. –

ответ

5

В sbt 0,13, <<= является устаревшим. Он использовался, когда определение задачи вводило зависимости от других задач - это позволяет вам извлекать результаты из этих других задач. Вот 0.12.4 документы на него: http://www.scala-sbt.org/0.12.4/docs/Getting-Started/More-About-Settings.html#computing-a-value-based-on-other-keys-values

В 0.13 вы можете просто использовать := всегда, так что вы можете увидеть, как изменение документы в 0.13 здесь: http://www.scala-sbt.org/0.13.1/docs/Getting-Started/More-About-Settings.html#computing-a-value-based-on-other-keys-values

Так 0,13 и за это безопасно забыть около <<=.

Если ссылки на документы не имеют смысла, это может помочь вернуться к началу руководства по началу работы и прочитать, чтобы получить фон.

+0

К сожалению, я использую sbt 0.13.0, и мой код работает только с '<< ='. Я добавил пример. –

+0

@ DominykasMostauskis Похоже, что информация Havoc, предоставленная в этом ответе, верна. Пока вы вызываете '.value', синтаксис': = 'должен работать и, по-видимому, способ пойти в 0.13. Разве это не отвечало на ваш вопрос? –

Смежные вопросы