在Scala中扩展trait中的对象

时间:2014-04-11 14:05:47

标签: scala playframework playframework-2.0 scala-2.10

我有以下代码:

trait AcceptExtractors {

  /**
   * Common extractors to check if a request accepts JSON, Html, etc.
   * Example of use:
   * {{{
   * request match {
   *   case Accepts.Json() => Ok(toJson(value))
   *   case _ => Ok(views.html.show(value))
   * }
   * }}}
   */
  object Accepts {
    import play.api.http.MimeTypes
    val Json = Accepting(MimeTypes.JSON)
    val Html = Accepting(MimeTypes.HTML)
    val Xml = Accepting(MimeTypes.XML)
    val JavaScript = Accepting(MimeTypes.JAVASCRIPT)
  }

}

有没有办法扩展Accepts对象?

谢谢!

2 个答案:

答案 0 :(得分:3)

不。

Object是单个值。如果他们可以延长,他们就不会是单身人士(*)。生成代表它们的类是最终的,所以即使你知道它的名字(不难发现),你也无法扩展它。

(*)Object只在全局范围内定义时才是真正的单例,或者严格嵌套在其他object中,导致回到全局范围。

答案 1 :(得分:1)

不,但你可以让Accepts成为你可以延伸的特质。