有一些源与Scala 2.8.0不兼容的情况。例如,创建匿名Seq
一次需要定义抽象def elements : Iterator[A]
,现在称为def iterator : Iterator[A]
。
对我而言,“强力”解决方案是创建两个与不同主要scala版本对齐的分支。
是否有通用技术,以便这样的代码可以在两个系统下编译?
// Note: this code resembles techniques used by xml.NodeSeq
trait FooSeq extends Seq[ Foo ] {
def internal : Seq[ Foo ]
def elements = internal.elements
def iterator = internal.iterator // Only compiles in 2.8
// need to remove for 2.7.X
}
答案 0 :(得分:2)
在某些情况下,使用情况完全不同,您必须更改。但在几乎所有情况下 - 例如上面的元素代码 - 2.7风格在2.8中简单地弃用,而不是完全消失。如果你没有给你的2.8用户留下弃用警告(编辑:如果他们编译你的代码,否则你自己就会收到警告),只需按照旧版本实现新功能:
def iterator = internal.elements
否则,我会推荐你所谓的暴力解决方案。使用足够聪明的VCS,这样你实际上不必编写两次代码(Git,Bazaar,Mercurial)和分支。