我有这样的事情:
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来通过使用方法before
或after
来订购它们(我选择使用它并不是什么大问题 - 这不是问题)。但是,那时我必须获得有序猫的清单并用于其他东西。希望我现在更清楚了:(
答案 0 :(得分:1)
不确定你的意思是"按照相同的顺序"。如果您知道订单,可以写
Array(catB, catA, catC)
如果您不知道订单(并且您不知道是否要拨打before
或after
),则可以申请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