Question

Je mets simplement à jour une partie de mon code au 2.9.0, et j'ai rencontré un problème. J'ai un trait que j'appelle «non-distributionnable» (essentiellement, tout devrait être aussi paresseux que possible --- aucun code extérieur non-distributionnable lui-même ne devrait s'exécuter jusqu'à ce que quelqu'un demande réellement un élément).

Dans 2.9.0, je ne semble cependant pas pouvoir remplacer FlatMap. Voici une version coupée, qui présente l'erreur:

import scala.collection.generic.CanBuildFrom

trait NonStrictIterable[A] extends Iterable[A] { self =>
  def iterator: Iterator[A]

  override def flatMap[B, That](f: A => TraversableOnce[B])(implicit bf: CanBuildFrom[Iterable[A], B, That]): That = {
    new NonStrictIterable[B] {
      def iterator = self.iterator flatMap { a: A => f(a).toIterable.iterator }
    }.asInstanceOf[That]
  }
}

Cela fonctionnait avant 2.9.0, mais maintenant je reçois "la méthode flatmap ne remplace rien". Recherche de la signature de la méthode pour iteable.flatmap, je vois que TraversableOnce dans le type que la signature a changé pour enTraversableOnce. Faire le changement correspondant

import scala.collection.GenTraversableOnce
import scala.collection.generic.CanBuildFrom

trait NonStrictIterable[A] extends Iterable[A] { self =>
  def iterator: Iterator[A]

  override def flatMap[B, That](f: A => GenTraversableOnce[B])(implicit bf: CanBuildFrom[Iterable[A], B, That]): That = {
    new NonStrictIterable[B] {
      def iterator = self.iterator flatMap { a: A => f(a).toIterable.iterator }
    }.asInstanceOf[That]
  }
}

J'obtiens l'erreur du compilateur "type erroné ou inaccessible".

Que se passe-t-il? Quelqu'un peut-il suggérer une solution de contournement?

Était-ce utile?

La solution

Vous devez passer à 2.9 Final. Il s'agissait d'une erreur dans un RC précédent qui a été corrigé.

Autres conseils

Travaille pour moi. Je soupçonne que vous compilez réellement contre Scala-Library.jar de RC3.

 ~/code/scalaz[scala-2.9.x*]: scala29
Welcome to Scala version 2.9.0.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_22).
Type in expressions to have them evaluated.
Type :help for more information.

scala> import scala.collection.GenTraversableOnce
import scala.collection.GenTraversableOnce

scala> import scala.collection.generic.CanBuildFrom
import scala.collection.generic.CanBuildFrom

scala> 

scala> trait NonStrictIterable[A] extends Iterable[A] { self =>
     |  def iterator: Iterator[A]
     | 
     |  override def flatMap[B, That](f: A =>
     | GenTraversableOnce[B])(implicit bf: CanBuildFrom[Iterable[A], B,
     | That]): That = {
     |    new NonStrictIterable[B] {
     |      def iterator = self.iterator flatMap { a: A => f(a).toIterable.iterator }
     |    }.asInstanceOf[That]
     |  }
     | }
defined trait NonStrictIterable
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top