Scala有序Mixin基类
在Scala 2.10.2中,我有一个主次样式版本号的抽象基类:Scala有序Mixin基类,scala,base-class,traits,Scala,Base Class,Traits,在Scala 2.10.2中,我有一个主次样式版本号的抽象基类: abstract class MajorMinorVersion( private [version] val major : Int, private [version] val minor : Int ) extends Ordered[MajorMinorVersion] { override def toString() : String = "%d.%d".format( major, min
abstract class MajorMinorVersion(
private [version] val major : Int,
private [version] val minor : Int
) extends Ordered[MajorMinorVersion]
{
override def toString() : String = "%d.%d".format( major, minor )
def compare( that : MajorMinorVersion ) = that.major == major match
{
case false => major - that.major
case true => minor - that.minor
}
}
我正在阅读的几种自定义文件类型具有以下格式的版本号:
case class FooFileVersion( maj : Int, min : Int ) extends MajorMinorVersion( maj, min )
case class BarFileVersion( maj : Int, min : Int ) extends MajorMinorVersion( maj, min )
这在以下方面非常有效:
scala> FooFileVersion( 1, 3 ) < FooFileVersion( 1, 4 )
res0: Boolean = true
最好的办法是什么?是否可以将有序的
特征混合到基类中,或者我需要将其混合到继承类中,并在那里定义比较
方法?我想这将是一个解决方案,但如果能够将比较抽象成一个基类就好了
我确信在某个地方有一个相对简单的解决方案,我只是错过了。提前谢谢 参数化要订购的类型:
abstract class MajorMinorVersion[V <: MajorMinorVersion[V]](...) extends Ordered[V] {
...
def compare(that: V)
...
}
case class FooFileVersion( maj : Int, min : Int ) extends MajorMinorVersion[FooFileVersion]( maj, min )
case class BarFileVersion( maj : Int, min : Int ) extends MajorMinorVersion[BarFileVersion]( maj, min )
抽象类主版本[V这似乎是一个合理的想法。有没有办法避免显式地进行类型参数化?在两个case类声明中意外地省略显式类型不会导致case编译失败,然后这两种类型又可以进行比较……您可以在majorminorvision
的左括号后添加this:V=>
>类定义。这将强制您在子类中指定正确的类型参数。
abstract class MajorMinorVersion[V <: MajorMinorVersion[V]](...) extends Ordered[V] {
...
def compare(that: V)
...
}
case class FooFileVersion( maj : Int, min : Int ) extends MajorMinorVersion[FooFileVersion]( maj, min )
case class BarFileVersion( maj : Int, min : Int ) extends MajorMinorVersion[BarFileVersion]( maj, min )