【发布时间】:2020-09-24 20:03:04
【问题描述】:
有没有办法将特征混合到 Dotty 或 Scala 中的现有对象中?
class SomeClass
trait SomeTrait
// This works, but it's not what I'm looking for:
new SomeClass with SomeTrait
// This is what I'm looking for, but it breaks:
val someClass = new SomeClass
someClass with SomeTrait
This 回答提供了一个宏观解决方案,但它已经 7 岁了,我希望(祈祷!)更简单的东西。
【问题讨论】:
-
我会从你为什么想要这个开始?什么是元问题。想要为现有对象混合额外的特征对我来说没有多大意义,它的用例是什么?
-
@LuisMiguelMejíaSuárez 这个想法是支持一个流畅的接口来添加特性(例如,
(new Organism).addWings()会产生一个Organism with Wings对象,而(new Organism).addWings().addLegs()会产生一个Organism with Wings with Legs对象。为了避免怀疑,Wings和Legs都是特征。)。然后,此功能将允许像makeItFly(Organism with Wings)这样的函数将 both 1)Organism with Wings对象和 2)Organism with Wings with Legs对象作为输入。 -
@LuisMiguelMejíaSuárez 基本需要是静态检查
makeItFly的主体,以确保它“拥有运行所需的一切”并在编译时进行检查. -
@LuisMiguelMejíaSuárez 这几乎就像一个类型级别的依赖注入概念(将依赖注入
makeItFly)。 -
如果有兴趣,也许可以:softwaretalks.io/v/4544/…
标签: scala scala-macros dotty scala-3