2010-01-28 9 views
3

Il existe quelques cas d'incompatibilité de source avec Scala 2.8.0. Par exemple, créer un Seq anonyme une fois requis définir le résumé def elements : Iterator[A], qui est maintenant appelé def iterator : Iterator[A].Comment faire face aux incompatibilités de source Scala dans 2.8.0?

Pour moi, une solution «brute force» consiste à créer deux branches qui s'alignent sur les différentes versions majeures de scala.

Y a-t-il des techniques générales pour que ce code compile sous les deux systèmes?

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

Vous voulez maintenir une base de code compatible avec 2.7.x et 2.8? 2.7 n'est même plus maintenu; pourquoi ne pas faire le grand saut? (C'est ce que je suis en train de faire en ce moment.) –

+0

Le véritable problème est celui de la conception de fonctionnalités 2.8.x par rapport à la prise en charge des versions 2.7.x. Un de mes projets de passe-temps commence à se faire remarquer, et je veux le réécrire, et bien, 2.8 est plutôt sympa ... Je ne fais surtout que rechercher des techniques que je n'ai pas envisagées et qui pourraient faciliter la tâche les choses d'abord en 2.8 et ensuite rendre les choses compatibles en 2.7.x, plutôt que l'inverse. –

Répondre

2

Il existe quelques cas où l'utilisation est simplement différente et vous devez changer. Mais dans presque tous les cas - comme le code des éléments ci-dessus - le style 2.7 est simplement déconseillé dans 2.8, pas complètement disparu. Si vous êtes d'accord en laissant vos 2,8 utilisateurs avec des avertissements de désapprobation (Éditer: si elles compilent votre code, sinon vous aurez juste les avertissements vous-même), mettre en œuvre juste les nouvelles fonctionnalités en termes de l'ancien:

def iterator = internal.elements 

Sinon, je recommanderais ce que vous appelez la solution brute force. Utilisez un VCS suffisamment intelligent pour ne pas devoir écrire deux fois plus de code (Git, Bazaar, Mercurial) et une branche.

+0

Merci, cela confirme principalement ma suspicion générale; Si vous voulez que les choses soient compatibles avec l'ancienne version, vous devez coder l'ancienne version et éventuellement la mettre à jour. Juste comme toujours. Je ne sais pas pourquoi j'ai ces idées dans la tête que de nouvelles langues vont réinventer ce genre de comportement. Tant pis - :) –