gpt4 book ai didi

scala - 函数参数: upper bound vs parent class as argument?

转载 作者:行者123 更新时间:2023-12-04 17:11:36 24 4
gpt4 key购买 nike

考虑一下我们有:

abstract class FlyingObject;
case class Rocket(name: String) extends FlyingObject;

这两个函数声明之间有什么区别:
def launch[T <: FlyingObject](fo: T)


def launch(fo: FlyingObject)

何时使用哪种类型的声明将是一个很好的例子。

[更新]

另一个很好的例子和解释可以在 there中找到。这是何时应该使用上限而不是仅将派生类作为参数的另一个示例。

最佳答案

拥有一个比FlyingObject更具体的T可能会很有用。也许想象你有一个方法

def modifyName(fo: FlyingObject, newName: String): FlyingObject = fo.copy(name=newName)

它返回带有修改名称的FlyingObject的副本。这使得此代码无法进行类型检查:
val newRocket: Rocket = modifyName(oldRocket, "new name")

由于modifyName返回的是FlyingObject,而不是Rocket。反而:
def modifyName[T <: FlyingObject](fo: T, newName: String): T = fo.copy(name=newName)

当火箭是传入的东西时,将返回一个火箭。

关于scala - 函数参数: upper bound vs parent class as argument?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10284779/

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