订单中的一些字符串

时间:2015-03-25 14:26:17

标签: string scala

我有这样的事情:

 object OrderingCats {    
    class Cat {
        def before(that: Cat): Cat = {
          that
        }

        def after(that: Cat): Cat = {
          this
        }

    def main(args: Array[String]) {
        val catA = new Cat
        val catB = new Cat
        val catC = new Cat

        catB before catA before catC   
       //how I can put in this order those Cat's names within a List?
    }
}

我如何以同样的顺序放入一个List,因为使用了方法before,猫的名字?

修改

我知道“猫”的顺序。我想使用一个小的DSL来通过使用方法beforeafter来订购它们(我选择使用它并不是什么大问题 - 这不是问题)。但是,那时我必须获得有序猫的清单并用于其他东西。希望我现在更清楚了:(

1 个答案:

答案 0 :(得分:1)

不确定你的意思是"按照相同的顺序"。如果您知道订单,可以写

Array(catB, catA, catC)

如果您不知道订单(并且您不知道是否要拨打beforeafter),则可以申请Ordering

case class Cat(name: String)

val catA = Cat("Plato")
val catB = Cat("Admetus")
val catC = Cat("Electra")

// use implicit alphabetical Ordering[String]
List(catA, catB, catC).sortBy(_.name)

或作为" DSL"。由于您要构建一系列猫,因此您需要至少一种将before引入单个猫和集合的常用方法。例如,您可以通过隐式转换def single将单个cat视为大小为1的集合。然后,您可以使用隐式类来扩展集合上允许的方法,或者只是引入您自己的具有DSL特定方法的集合包装器Cats

object Cat {
  // enable 'Cats' methods on a single cat
  implicit def single(c: Cat): Cats = new Cats(Vector(c))
}
case class Cat(name: String)

case class Cats(seq: Vector[Cat]) {
  def before(c: Cat) = Cats(seq :+ c)
  def after (c: Cat) = Cats(c +: seq)
}

val catA = Cat("Plato")
val catB = Cat("Admetus")
val catC = Cat("Electra")

catB before catA before catC