scala中空特性的目的是什么?

时间:2014-06-14 05:11:33

标签: scala

在Play框架中的Action.scala中,它具有以下代码,为什么它定义了特征" Handler"没有任何方法或领域,定义空特征的目的或好处是什么?

trait Handler

/**
 * A handler that is able to tag requests. Usually mixed in to other handlers.
 */
trait RequestTaggingHandler extends Handler {
  def tagRequest(request: RequestHeader): RequestHeader
}

1 个答案:

答案 0 :(得分:6)

构建于@ user2864740

一个简单的例子。 (这只是一个用例)

让我们为简单表达式定义数据结构。我们希望数字存在,并且结合表达式的加号。

trait Expression

case class Number(i: Int) extends Expression
case class Plus(e1: Expression, e2: Expression) extends Expression

现在,为了评估Expression,我们定义了一个这样的方法。

def evaluate(e: Expression): Int = e match {
  case Number(i) => i
  case Plus(e1, e2) => evaluate(e1) + evaluate(e2)
}

由于我们Expression作为Plus的参数,我们可以将PlusNumber放入其中。

val myExpression = Plus(Plus(Number(1),Number(2)), Number(4))
evaluate(myExpression) //yields 7

我们只使用空特征作为NumberPlus的常见超类型(连接),使我们能够对evaluate进行模式匹配并使用PlusPlus内。 我希望这不会太混乱。