部分的に適用された関数を抽出または問い合わせて、適用された値を取得する方法はありますか。たとえば、次のコードの reduceBy3 から値 3 を抽出できますか。
def subtract(x:Int, y:Int) = x-y
val reduceBy3 = subtract(3,_:Int)
以下の例に示すエクストラクタの作成を試してみましたが、unapply メソッドは、問い合わせを必要とする (Int=>Int) 関数を受け入れる必要があります。
class ReduceBy(y: Int) {
val amt = y
def subtract(y: Int, x: Int) = x - y
}
object ReduceBy extends Function1[Int, Int => Int] {
def apply(y: Int) = {
val r = new ReduceBy(y)
r.subtract(y, _: Int)
}
def unapply(reduceBy: ReduceBy): Option[Int] = Some(reduceBy.amt)
}
object ExtractPartialApplied extends App {
val r3 = ReduceBy(3)
val extract = r3 match {
case ReduceBy(x) => ("reduceBy", x)
case x: ReduceBy => ("reduceBy", x.amt)
case _ => ("No Match", 0)
}
println(extract)
val z = r3(5)
println(z)
}