gpt4 book ai didi

Scala/Dotty - 将特征混合到现有对象中

转载 作者:行者123 更新时间:2023-12-03 19:42:33 25 4
gpt4 key购买 nike

有没有办法将特征混合到 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 answer 提供了一个宏解决方案,但它已经有 7 年的历史了,我希望(手指交叉!)更简单。

最佳答案

看看看似废弃但相当新的图书馆 zio-delegate :

import zio.delegate._

class SomeClass

trait SomeTrait {
def test() = println("It just works!")
}

val someClass = new SomeClass

val result: SomeClass with SomeTrait =
Mix[SomeClass, SomeTrait].mix(someClass, new SomeTrait {})

result.test()

它仍然是基于宏的,在 Scala 中使用 mixin 到这种程度并不常见。 Zio 完全变成了另一种模式,IIUC。

关于Scala/Dotty - 将特征混合到现有对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61135323/

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