3

Scala2.8.0とのソースの非互換性のいくつかのケースがあります。たとえば、かつては匿名を作成する必要があり、現在はと呼ばれてSeqいる抽象を定義します。def elements : Iterator[A]def iterator : Iterator[A]

私にとって、「強引な」解決策は、異なる主要なScalaバージョンに合わせて2つのブランチを作成することです。

このようなコードが両方のシステムでコンパイルされるようにするための一般的な手法はありますか?

// 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

それ以外の場合は、ブルート フォース ソリューションと呼ばれるものをお勧めします。実際には多くのコードを 2 回 (Git、Bazaar、Mercurial) 書いてブランチする必要がないように、十分に賢い VCS を使用してください。

于 2010-01-28T13:48:47.950 に答える