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

Scala类型匹配中为何需要单独的case标识符?

问题解析:Scala类型匹配中标识符的作用

先看示例代码:

sealed trait Device
case class Phone(model: String) extends Device:
  def screenOff = "Turning screen off"

case class Computer(model: String) extends Device:
  def screenSaverOn = "Turning screen saver on..."


def goIdle(device: Device): String = device match
  case p: Phone => p.screenOff
  case c: Computer => c.screenSaverOn

为什么需要p和c这类标识符?

核心原因是:父类型Device并没有定义screenOff或screenSaverOn方法。

如果直接写device.screenOff,编译器会直接报错——因为从Device的类型视角出发,它完全不知道子类有这些专属方法。而通过case p: Phone这种类型匹配,Scala编译器会自动把p的类型精确推断为Phone,此时调用p.screenOff就完全合法,因为Phone类确实定义了这个方法。同理,c会被推断为Computer类型,自然能调用screenSaverOn。

说白了,这些标识符是用来获取类型匹配后的精确子类型实例,让我们能访问子类特有的成员,而父类型本身并没有这些成员。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:29:55