Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

無名クラス中でそれ自身の型を表現するにはthis.typeと書く

無名クラスのunapplyを書きたかった。

val foo = new {
  // ...
  def unapply(it: /* ここに自分自身の型 */) = Some(...)
}

でもこういうときって自分自身の型をどう表現すればよいの!?と思って職場でうなっていたところ、 id:tarao さんが助けてくれた。解決方法はthis.typeと書くこと。

val foo = new {
  // ...
  def unapply(it: this.type) = Some(...)
}

これで自分自身の型を表現できる!!すごい!!

ところで後から気付いたのだけれど、unapplyはコンパニオンオブジェクトに実装しなければならないので、無名クラスのunapplyを実装することはできなそうだった。

val foo = new {
  // ...
  val a = ...
  val b = ...
  val c = ...
  def unapply(it: this.type) = Some(...)
}
val (a, b, c) = generateFoo()

こういうことがやりたかった…………。

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?