gpt4 book ai didi

scala - Coproduct 对 `sealed trait` 的好处?

转载 作者:行者123 更新时间:2023-12-04 17:44:14 26 4
gpt4 key购买 nike

我阅读了以下关于 coproducts 的信息中优Shapeless Guide :

... it’s worth stating that Coproducts aren’t particularly special. The functionality above can be achieved using Either and Nothing in place of :+: and CNil.



这是上面的代码:
import shapeless.{Coproduct, :+:, CNil, Inl, Inr}
case class Red()
case class Amber()
case class Green()
type Light = Red :+: Amber :+: Green :+: CNil

val red: Light = Inl(Red())
// red: Light = Inl(Red())
val green: Light = Inr(Inr(Inl(Green())))
// green: Light = Inr(Inr(Inl(Green())))

就我个人的理解而言,如果有的话,在 sealed trait 上使用 Coproduct 有什么好处? ?

最佳答案

一个好处类似于使用类型类而不是继承:即席多态性。您可以使用任何类型制作 Coproduct,甚至是您无法控制的类型,例如字符串和整数。你不能用密封的特性来做到这一点(除非你制作了尴尬的 StringHolderIntHolder 案例类来包装它们)。

关于scala - Coproduct 对 `sealed trait` 的好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41949408/

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