scala中匹配模式,没有加match是代表什么?

飞酒
  • 2
新手上路,请多包涵

最近在学习akka 看见一个列子,如下在这里的case 之前没有引用match
不太清楚具体什么意思,希望可以解答一下。

class AkkademyDb extends Actor { 
    val map = new HashMap[String, Object] 
    val log = Logging(context.system, this) 
    override def receive = { 
        case SetRequest(key, value) => { 
        log.info("received SetRequest - key: {} value: {}", key, value) map.put(key, value) 
        } 
        case o => log.info("received unknown message: {}", o); 
    } 
评论
阅读 372
1 个回答
飞酒
  • 2
新手上路,请多包涵
✓ 已被采纳

经过了2次学习,这个地方运用了偏函数的写法
首先看一下akka的源码:


type Receive = akka.actor.Actor.Receive
/**
* 也就代表了我这个地方是重写了一个偏函数,传入的值为Any然后不进行返回
**/
type Receive = scala.PartialFunction[scala.Any, scala.Unit]

偏函数的具体使用如下~~~~

object PartialLearn{
  def main(args: Array[String]): Unit = {
    /**
     * 定义了一个偏函数 pp 传入的参数为 Any
     * 输出为 Int
     * 重写里面的[[PartialFunction.isDefinedAt()]] 和
     * [[PartialFunction.apply()]]
     * isDefinedAt 会对进行的数据进行过滤,如果为true则会调用
     * apply方法
     */
    val pp=new PartialFunction[Any,Int] {
      override def isDefinedAt(x: Any): Boolean = {
        x.isInstanceOf[Int]
      }

      override def apply(v1: Any): Int = {
        v1.asInstanceOf[Int]+1
      }
    }
    val list=List(1,2,3,13,1,"123")
    val f1:PartialFunction[Any,Int]={
      case x:Int=> x+1
    }

    /**
     * 使用偏函数后就不可以使用[[list.map()]]
     * 而需要使用[[list.collect()]]
     */
    print(list.collect(f1))
    print(list.collect(pp))
  }

}
撰写回答

登录后参与交流、获取后续更新提醒

宣传栏