gpt4 book ai didi

Scala 下限类型限制 'is a subtype' 对方法参数的限制

转载 作者:行者123 更新时间:2023-12-01 07:47:41 28 4
gpt4 key购买 nike

在 Scala 中,为什么在方法类型参数上设置类型下限不会对方法参数强制执行“是父类(super class)型”限制?

object TypeBounds extends App {
class MotorVehicle
class Truck extends MotorVehicle
class Car extends MotorVehicle
class Saloon extends Car
class HatchBackSaloon extends Saloon

def lowerTypeBound[C >: Car](c: C): C = c

def upperTypeBound[C <: Car](c: C): C = c

// Works. HatchBackSaloon is a sub class of Car
println(upperTypeBound(new HatchBackSaloon()))

// as expected doesn't compile. Truck is not a subclass of Car
println(upperTypeBound( new Truck()))

// Compiles and runs, but why ? HatchBackSaloon is not a super class of Car.
println(lowerTypeBound(new HatchBackSaloon()))

}

最佳答案

C 在您的示例中具体化为 Car,而不是 HatchbackSaloon

看起来像 def lowerTypeBound(c: Car): Car 的函数可以接受类型为 HatchbackSaloon 的参数,这并不奇怪,对吧?

尝试这样的事情:

val result: HatchBackSaloon = lowerTypeBound(new HatchBackSaloon)

这不会编译,因为它要求 CHatchbackSaloon,它不是 Car 的父类(super class)。但这会起作用:

val result: MotorVehicle = lowerTypeBound(new HatchbackSaloon)

因为 C 在这里是 MotorVehicle,这是允许的。

关于Scala 下限类型限制 'is a subtype' 对方法参数的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34636858/

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