gpt4 book ai didi

scala - 是否可以定义一个未命名的特征并将其用作 Scala 中的混合?

转载 作者:行者123 更新时间:2023-12-01 23:56:00 27 4
gpt4 key购买 nike

我已经使用结构类型而不是包装特征实现了蛋糕模式。我现在正在像这样连接我的依赖项:

trait GreeterDependency { def greeter = HelloGreeter }
val printer = new Printer with GreeterDependency

如果我能做这样的事情就好了:

val printer = new Printer with trait { def greeter = HelloGreeter }

但是,我收到一个语法错误。有没有办法定义一个未命名的特征并将其用作像这样的混合?

(为清楚起见,这是我的所有代码:http://ideone.com/vMDFYD)

最佳答案

我不完全确定您要做什么,但我认为您正在寻找的是用在匿名类中定义的抽象成员来实例化特征。如果是这种情况,您可以这样做:

val printer = new Printer { def greeter = HelloGreeter }

我现在经常使用这种模式来弥补 traits 无法定义构造函数参数这一事实。

基于问题中的 Ideone 链接的完全重构:

trait Greeter {
def apply(name: String): String
}

object HelloGreeter extends Greeter {
def apply(name: String) = s"Hello, $name!"
}

trait Printer {
def greeter: Greeter

def apply(name: String) = println(greeter(name))
}

object Main extends App {
val printer = new Printer { def greeter = HelloGreeter }
printer("rightfold")
}

此处运行示例:http://ideone.com/mAumNY

关于scala - 是否可以定义一个未命名的特征并将其用作 Scala 中的混合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23711875/

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