Skip to content

Instantly share code, notes, and snippets.

@xuwei-k
Created September 16, 2011 04:40
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xuwei-k/1221210 to your computer and use it in GitHub Desktop.
Save xuwei-k/1221210 to your computer and use it in GitHub Desktop.
build.sbt を DRY に書く方法

build.sbt って、かならず settingの値 じゃないといけないから、

val UnfilteredVersion = "0.5.0"

っていう行を定義できないけれど、こんな風 ↓ に書けば DRY に書けるね!っていう、超細かいどーでもいいテクニック !

Some("net.databinder","0.5.0").map{case (a,v) =>
  libraryDependencies ++= Seq(
     a %% "unfiltered-jetty" % v
    ,a %% "unfiltered-netty" % v
    ,a %% "unfiltered-filter" % v
  )
}.get

scalaVersion := "2.9.1"
  1. seq っていうbuild.sbtのみでつかえる特殊なやつがある(複数のsettingの値を渡せる)
  2. build.sbtは空行が開いてなければ、そのまとまりを一つのsettingの値(もしくは、seqが使われていたら複数のsetting値)として評価しようとする感じ(?)
  3. Scalaでは中カッコでくくれば、その式の最後の値が、その中カッコでくくったブロックの値になる
{
  object Hoge
  val ababababababa = "ababababa"
  seq(
     scalaVersion := "2.9.1"
    ,scalacOptions ++= Seq(
      "-deprecation"
    )
    ,initialCommands in console := "import scalaz._;import Scalaz._"
    ,libraryDependencies ++= Seq(
      "org.scalaz" %% "scalaz-core" % "6.0.3"
    )
  )
}

すると、「全部中括弧でくくったひとつのブロック内でゴニョゴニョして、最後にseqでまとめて渡す」という方法で頑張れば (どこからでも參照できる)objectとかvalをいっぱい定義できるね!

っていう誰得(´・ω・`)?なテクニック

@ueno1969
Copy link

{}で囲ってやってもOKです。

libraryDependencies ++= {
    val a = "net.databinder"
    val v = "0.5.0"
    Seq(
       a %% "unfiltered-jetty" % v
      ,a %% "unfiltered-netty" % v
      ,a %% "unfiltered-filter" % v
   )
}

@xuwei-k
Copy link
Author

xuwei-k commented Sep 16, 2011

おぉ・・・こっちのほうがいいですね・・・(´・ω・`)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment