scala中的case类可以当作偏函数作为参数传入,然后提供相当于副作用的功能。
package common.typepara
case class B(value: Int) {
/*
* transform函数接收一个偏函数作为转换规则,这个规则在spark中
* 会被用到树型遍历中,将树中的每个节点都使用该规则转换
* */
def transform(rule: PartialFunction[B, B]): B = {
val afterRule = rule.applyOrElse(this, identity[B])
afterRule
/*
* 将该规则返回作用之后的值
* */
}
}
object PartialFunc {
def apply(i: B): B = i transform /*
* 下面为transform函数的参数,这个参数是一个case类的集合,
* 该case类的集合为一个偏函数
* */{
case B(t) => B(t+1023)
}
}
object M {
def main(args: Array[String]) = {
val a = new B(1)
println(PartialFunc(a).value)
}
}