gpt4 book ai didi

scala - 在 Scala 中应该只接受 A 或 B 或 C 实例的方法

转载 作者:行者123 更新时间:2023-12-01 09:19:59 24 4
gpt4 key购买 nike

我会确保方法只接受 ABC 的实例。而且我不想修改ABC的代码。

case class A
case class B
case class C
def method(aOrbOrc: Any) = ???

// method("toto") should not compile

最佳答案

你可以使用类型类。

case class A(s: String)
case class B(i: Int)
case class C(i1: Int, i2: Int)

// Type Class
trait ABC[T] {
def bar(t: T): String
}
// Instances
implicit object ABC_A extends ABC[A] {
override def bar(t: A): String = "A : s = " + t.s
}
implicit object ABC_B extends ABC[B] {
override def bar(t: B): String = "B : i = " + t.i
}
implicit object ABC_C extends ABC[C] {
override def bar(t: C): String = "C : i1 = " + t.i1 + ", i2 = " + t.i2
}

def method[T](abc: T)(implicit instance: ABC[T]) = println(instance.bar(abc))

method(A("AAAAA")) // => A : s = AAAAA
method(B(123)) // => B : i = 123
method(C(9, 5)) // => C : i1 = 9, i2 = 5
method(1) // compilation error

关于scala - 在 Scala 中应该只接受 A 或 B 或 C 实例的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34982724/

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