**注:**这是一个人为的示例。
考虑下面的存在类型。
sealed trait Showable
final case class Show[A](show: A => String, value: A) extends Showable
我可以定义一个show
方法如下:
def show(showable: Showable): String = showable match {
case Show(show, value) => show(value)
}
但是模式匹配分别为show
和value
推断Any => String
和Any
类型,因此,我也可以定义show
方法如下:
def show(showable: Showable): String = showable match {
case Show(show, value) => show(42)
}
这是不安全的。如何确保在case表达式中show
只能应用于value
?
2条答案
按热度按时间56lgkhnf1#
如果匹配键入的模式,则
或
编译但
或
不会。
ycl3bljg2#
您可以使用依赖类型使其类型安全