PS

String interpolationによるextractor

Processed string literalの展開

foo"t0${x1}t1 ... ${xn}tn"

は、

new StringContext("t0", "t1", ... , "tn").foo(x1, ..., xn)

のように展開される・・・のだが、これが有効な式でさえあればよいらしく、 extractorも返せてしまうようだ。*1

    implicit class Plus(sc: StringContext) {
        object plus {
            def apply(x: Int, y: Int): Int = x + y
            def unapply(z: Int): Option[(Int, Int)] = Some((1, z-1))
        }
    }

    def testMe() {
        val (x, y) = (1, 2)
        assertEquals(3, plus"$x$y")

        val plus"$v$w" = 3
        assertEquals((1, 2), (v, w))
    }

参考文献

*1:ただし、undocumented