【发布时间】:2021-11-19 10:45:26
【问题描述】:
我想知道是否可以将 Scala 特征与实例混合以创建匿名实例。
基本上我会做这样的事情
trait Duck {
def walk : Unit
}
def learnToDuckWalk[A](a : A) : A with Duck = a with Duck {
def walk = print("flic flak floc")
}
这个想法是创建一个新类型,而不必定义一个扩展 2 种类型的全新类。 因为为每种类型定义一个新类可能会导致类数量呈指数级增长,每次我们向 mixin 添加新的 Trait 时都会增长。
我在 ZIO.Has 中很少看到类似这样的东西,但我想知道它是否适用于纯 Scala 2 甚至 Scala 3。
【问题讨论】:
-
这正是 ad-hoc-polymorphism 的样子。类型类是这些用例的必经之路。
-
我可以看到有人用宏来做这件事,但是你能举个例子说明 ZIO 是怎么做的,这样用例就更清楚了吗?
标签: scala traits mixins scala-3