是否可以定义一个未命名的特征,并将其用作Scala中的mixin?

是否可以定义一个未命名的特征,并将其用作Scala中的mixin?,scala,mixins,traits,Scala,Mixins,Traits,我已经使用结构类型而不是包装特性实现了蛋糕模式。我现在将我的依赖项连接起来,如下所示: trait GreeterDependency { def greeter = HelloGreeter } val printer = new Printer with GreeterDependency 如果我能做这样的事情就好了: val printer = new Printer with trait { def greeter = HelloGreeter } 但是,我得到了一个语法错误。有没有

我已经使用结构类型而不是包装特性实现了蛋糕模式。我现在将我的依赖项连接起来,如下所示:

trait GreeterDependency { def greeter = HelloGreeter }
val printer = new Printer with GreeterDependency
如果我能做这样的事情就好了:

val printer = new Printer with trait { def greeter = HelloGreeter }
但是,我得到了一个语法错误。有没有一种方法可以定义一个未命名的特征,并将其用作这样的混合


(为了清楚起见,这里是我所有的代码:)

我不完全确定您要做什么,但我认为您要寻找的是用匿名类中定义的抽象成员实例化trait。如果是这种情况,您只需执行以下操作:

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")
}

在此运行示例:

如果问题不清楚,我深表歉意。我在问题中添加了代码链接。@rightfold:检查我的ideone。我不确定它是否抓住了你所追求的精神,但它与我处理问题的方式非常相似。我不是一个经验丰富的Scala开发人员,但到目前为止,我发现每当我认为我需要使用自类型和结构类型注释时,至少对于基本情况,有一个更简单的答案。