gpt4 book ai didi

scala - 如何创建可应用于包含相同参数的两种或多种类型的泛型函数?

转载 作者:行者123 更新时间:2023-12-03 23:20:22 24 4
gpt4 key购买 nike

假设我们有两个案例类 Woof 和 Meow

case class Meow(a: String, b: String)
case class Woof(a: String, b: String)
我们想创建一个函数 foo 将 a 与 b 连接起来,并且对 Woof 和 Meow 都通用(有点),例如:
def foo[T](meowOrWoof: T) = meowOrWoof.a + meowOrWoof.b
当然,这不会编译,因为 a 和 b 都不是 T 的参数。
我尝试过的一件事是创建一个特征,如:
trait Pets[T] {
def foo[T](someClass: T): String
}

case class Meow(a: String, b: String) extends Pets[Meow] {
override def foo[T](someClass: T) = a + b
}
case class Woof(a: String, b: String) extends Pets[Woof] {
override def foo[T](someClass: T) = a + b
}
但是在这里我们必须多次创建该函数,即使它具有相同的实现。
有没有另一种方法可以创建同时适用于 Meow 和 Woof 的函数 foo,并将 a 与 b 连接起来?

最佳答案

如果您的案例类可以 extend一个共同的特征或抽象类......

abstract class AB {
val a:String
val b:String
}
case class Meow(a: String, b: String) extends AB
case class Woof(a: String, b: String) extends AB

def foo(ab:AB):String = ab.a + ab.b

foo(Woof("growl","bark")) //res0: String = growlbark

关于scala - 如何创建可应用于包含相同参数的两种或多种类型的泛型函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63434677/

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