从documentation开始。
您可以按如下方式匹配类型:
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)。
问题:
为什么我们需要单独的标识符p
和c
?为什么我们不能像在普通模式匹配的情况下那样使用device.screenOff
或device.screenSaverOn
来实现相同的效果?
1条答案
按热度按时间ev7lccsx1#
两个选项都有效:
假设
Phone
或Computer
有很多参数,使用第二种方法,您将编写类似Phone(_,_,_,....,_)
、Computer(_,_,_,....,_)
的模式。如果
device
的类型只有Device
(而不是它的子类型Phone
或Computer
),那么device.screenOff
或device.screenSaverOn
不会编译。