gpt4 book ai didi

scala - Scala 模式匹配中无法访问的代码

转载 作者:行者123 更新时间:2023-12-01 08:32:43 26 4
gpt4 key购买 nike

执行下面的代码

println("Pattern Matching by type")

val priceofCar : Any = 2.0
val priceType = priceofCar match{

case price: Int => "Int" // 1
case price: Float => "Float" // 2
case price: Any => "Any" // 3
case price: Double => "Double" // 4
case _ => "others" // 5
}
// println(:type priceofCar)
println(s"Car price type = $priceType")

最终得到以下输出

汽车价格类型 = 任何

和警告信息

警告:无法访问的代码
案例价格:Double => "Double"//4
^
发现一个警告。

但是,在交换行//3 和//4 的顺序后,没有显示警告并获得以下输出

车价类型 = 双倍

现在我的疑问是,
1)在这两种情况下它都应该坚持“双倍”或“任何”,但不是为什么?
2)为什么会抛出警告?

最佳答案

val priceType = priceofCar match{

case price: Int => "Int" // 1
case price: Float => "Float" // 2
case price: Any => "Any" // 3
case price: Double => "Double" // 4
case _ => "others" // 5
}

模式匹配是顺序匹配的,这意味着它首先将价格与第一种情况匹配,即价格:Int 然后 Float 然后 Any 等等。

我们应该首先保留最具体的类型,正如我们在图中看到的,Any 位于类型层次结构(最通用的类​​型)的顶部,它可以消耗任何东西,这就是您在 case price: Any 之后的行收到警告无用代码的原因。

如果您在第 5 行看到,它表示 any 类型的 case price 位于这些类型的hierachy 的顶部。它将匹配任何 Int、Flot、String、List 或任何用户定义的数据类型。
这就是为什么 case price:Any 下面的行没有用,因为控制不会在 Any 之后进入下一个 case。

enter image description here

关于scala - Scala 模式匹配中无法访问的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53955327/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com