如何解决2.8.0中的Scala源代码不兼容问题?

时间:2010-01-28 13:07:54

标签: scala incompatibility

有一些源与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
}

1 个答案:

答案 0 :(得分:2)

在某些情况下,使用情况完全不同,您必须更改。但在几乎所有情况下 - 例如上面的元素代码 - 2.7风格在2.8中简单地弃用,而不是完全消失。如果你没有给你的2.8用户留下弃用警告(编辑:如果他们编译你的代码,否则你自己就会收到警告),只需按照旧版本实现新功能:

def iterator = internal.elements

否则,我会推荐你​​所谓的暴力解决方案。使用足够聪明的VCS,这样你实际上不必编写两次代码(Git,Bazaar,Mercurial)和分支。