我正在写一些Scala处理线性时间线上的间隔。目前区间的开始和结束都表示为Int
s,但是,在某些情况下,我想对它们稍微区别对待(但它们仍需要为Int
s来处理某些外部代码)。Scala类型别名和方法重载
我认为这是一种类型的别名将是一个很好的方式来添加一些编译时检查,我可以通过方法重载处理不同的处理。下面是一个说明性的例子:
type IntervalStart = Int
type IntervalEnd = Int
case class Interval(s: IntervalStart, e: IntervalEnd)
val i = Interval(1, 10)
def process(s: IntervalStart): Unit = { println("Do some start specific work") }
def process(e: IntervalEnd): Unit { println("Do some end specific work") }
process(i.s) // "Do some end specific work" WRONG!!
process(i.e) // "Do some end specific work"
看来好像不正确重载process
方法,总是选择稍后的定义。这是Scala类型别名的限制,某种奇怪的JVM类型擦除事件,还是对我的正确行为的误解?
**别名**应该给我的主要线索!我在想''类型IntervalStart'是一个_new_类型。感谢您的澄清。 – Alastair 2014-09-02 13:57:23