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

发布于 2022-09-12 03:55:53 字数 482 浏览 17 评论 0

最近在学习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); 
    } 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

起风了 2022-09-19 03:55:53

经过了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))
  }

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文