Scala преобразует Seq в k, v из sbt.Project.Setting[_]

Build.sbt из Play 2.0 использует упрощенное определение Project, чтобы творить чудеса; любые дополнительные настройки, которые вам могут понадобиться, должны быть введены вручную k := v способом. Хорошо работает для общего случая, но не для конкретного; а именно, когда необходимо установить настройки sbt-плагина, которые неизменно равны Seq[Settings[_]]. Вот пример того, что предсказуемо работает

lazy val main = PlayProject(appName, appVersion, ....).settings(
  version := appVersion
)

Теперь, как преобразовать Seq[Settings[_]] в пары k,v, чтобы вызов Play по имени:

def apply(...., ...., settings: => Seq[Setting[_]])

реально работает?!!

Я спрашивал у play-user, но удачи, зоопарк там, фреймворк набирает обороты, а разработчики ядра явно по уши...


person virtualeyes    schedule 22.05.2012    source источник


Ответы (2)


Это работает?

….settings(mySeqOfSettings: _*)
person Debilski    schedule 22.05.2012
comment
@Debiliski спасибо, пробовал это раньше, компилятор жаловался, такие аннотации разрешены только в аргументах для *-параметров. Серьезная, бороздящая брови боль, сводящая меня с ума ;-) - person virtualeyes; 23.05.2012
comment
@Debs на самом деле вы правы в единственном случае; Однако у меня есть несколько Seq[Settings[_]] для передачи; вот где я получаю из шланга. Возможно, подойдет какой-нибудь flatMap или магия сокращения - person virtualeyes; 23.05.2012
comment
(seq1 ++ seq2): _* — или вы хотите исключить повторяющиеся ключи? - person Debilski; 23.05.2012
comment
это также работает: seqSettings.flatMap{x=›x}: _*, где я сделал seqSettings последовательностью последовательностей. Мне нравится ваш ++, однако, вы получаете кивок ;-) - person virtualeyes; 23.05.2012
comment
Вместо flatMap{x=>x} можно было бы и flatten. - person Debilski; 23.05.2012
comment
++ кажется более похожим на sbt, хотя в этом случае flatten действительно выглядит лучше, чем flatMap. Спасибо за помощь! - person virtualeyes; 23.05.2012

Я столкнулся с той же проблемой с игровым фреймворком и плагином sbt-buildinfo. После долгих проб и ошибок я предпочел применять настройки дважды подряд. Мне показалось более очевидным, что происходит в Build.scala: http://mfizz.com/blog/2013/04/auto-generate-class-file-build-info-play-framework

person biznatch    schedule 13.07.2013