このエントリは Scala Advent Calendar jp 2011 の5日目です。 Scalaやってる人なら一度はScala言語仕様に目を通したことがあると思います無いとは言わせない。 この言語仕様を見ると、たまに思いもよらない発見があったりしますが、その中でほとんど利用されているところを見たことがない不遇な機能「5.1.6 事前定義 (Early Definitions)」について書こうと思います*1。 事前定義 (Early Definitions)とは? テンプレートを事前フィールド定義(early field definition)節で始めることができ、それにより スーパー型のコンストラクタがコールされる前に、ある特定のフィールド値を定義できます。 次のテンプレート中で { val p1 : T1 = e1 ... val pn : Tn = en } with sc wi