You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无match关键字的Scala模式匹配:匹配对象及语法疑问咨询

关于Scala中Policy.adjust方法的两个疑问解答

首先先把你提到的这段Scala代码贴出来方便参考:

object Policy {
  def adjust[P <: Policy](p: P, d: Discount): P = {
    case ap: AutoPolicy => new AutoPolicy
    case lp: LifePolicy => new LifePolicy
    // ... etc
  }
}

咱们逐个解决你的两个疑问:

一、模式匹配具体作用于哪个值?

这个模式匹配的目标就是方法的第一个参数p。你可以把这段代码理解成是下面写法的简化:

def adjust[P <: Policy](p: P, d: Discount): P = p match {
  case ap: AutoPolicy => new AutoPolicy
  case lp: LifePolicy => new LifePolicy
  // ... etc
}

本质上就是对传入的p(也就是具体的Policy子类实例)做类型匹配,根据它的实际类型返回对应的新实例。

二、代码为何省略了match关键字?

这是Scala提供的语法糖,当方法的整个方法体就是一个针对单个参数的模式匹配时,你可以省略match关键字,直接写case语句块。这种写法其实是把方法体定义成了一个偏函数(PartialFunction),Scala会自动把它和参数p绑定起来,等价于显式写p match { ... }的形式。

不过要注意,这种写法只有当匹配的目标是方法的参数,且整个方法体就是模式匹配表达式的时候才能用,要是你在方法体里还有其他逻辑,就必须显式写出match关键字了。

内容的提问来源于stack exchange,提问作者sge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:43:00