1

我想请你帮忙美化客户端代码。

假设我有一些用于 MongoDB 检索的基本方法:

 def find(dbo:DBObject):MongoCursor =
    mongoColl.find(dbo)

  def Sort(cursor: MongoCursor, sortFun: DBObject): MongoCursor =
    cursor.sort(sortFun)

  def Limit(cursor: MongoCursor, number: Int): MongoCursor = cursor.limit(number)

  def Offset(cursor: MongoCursor, number: Int): MongoCursor = cursor.skip(number)

  def toList(cursor: MongoCursor): List[A] =
   cursor map (readConverter(_)) toList

我想以不同的方式将它们链接在一起(假设我想执行一些有限的搜索,一些排序的搜索,基本上就像一个装饰器)。你会怎么做?

谢谢你的帮助。

4

1 回答 1

0

您可以尝试使用隐式值类来丰富MongoCursor

object ImplicitClassContainer {
  implicit class RichMongoCursor(val mc: MongoCursor) extends AnyVal {
    def sort(sortFun: DBObject): MongoCursor = mc.sort(sortFun)

    def limit(number: Int): MongoCursor = mc.limit(number)

    def offset(number: Int): MongoCursor = mc.skip(number)
  }

}

像这样使用

  import ImplicitClassContainer._

  def x(mc: MongoCursor): MongoCursor = {
    mc.offset(25).limit(25)
  }

基本上,它与用于ArrayMongoCursor. 由于它是一个隐式值类,因此在运行时不会创建对象的其他实例。

于 2013-07-13T17:58:15.633 回答