無名クラスの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()
こういうことがやりたかった…………。