3

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

1 回答 1

2

在某些情况下,用法完全不同,您必须进行更改。但在几乎所有情况下——比如上面的元素代码——2.7 风格在 2.8 中被简单地弃用了,并没有完全消失。如果您可以让您的 2.8 用户收到弃用警告(编辑:如果他们编译您的代码,否则您自己只会收到警告),只需根据旧功能实现新功能:

def iterator = internal.elements

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

于 2010-01-28T13:48:47.950 回答