Je suis un développeur Scala débutant ayant des problèmes avec un exercice de codage (5.12) pris par le livre "Programmation fonctionnelle en Scala" par Paul Chiusano.Motif correspondant dans la fonction anonyme dans Scala
J'ai cette fonction ici, appelé déplier, qui prend un état initial et une fonction pour produire un courant avec les états suivants:
def unfold[A,S](z: S)(f: S => Option[(A,S)]): Stream[A] = f(z) match {
case Some((h,t)) => h #:: unfold(t)(f)
case _ => Stream.empty
}
Par exemple, avec cette fonction, on peut créer un infini flux d'objets, par exemple
def constant[A](a: A): Stream[A] = unfold(a)(_ => Some(a,a))
Maintenant, je veux créer la séquence de Fibonacci, je tape:
def fibs: Stream[Int] = unfold((0,1))((a,b) => Some(a,(b,a+b)))
Je reçois ces erreurs:
manquants type de paramètre b
Expression de type Certains [((Int, Int), (Nothing, String))] ne se conforme pas à l'option de type attendu [(A _, (Int, Int))]
Si je le cas mot-clé dans la fonction anonyme est passé à se dérouler, comme:
{ case (a,b) => Some(a,(b,a+b))}
tout va bien. Donc, ma question est: quelle est la différence entre les deux implémentations? Est-ce quelque chose à propos de l'inférence de type que je ne comprends pas?
Possible duplicate de [Quelle est la différence formelle dans Scala entre accolades et parenthèses, et quand devraient-ils être utilisés?] (Http://stackoverflow.com/questions/4386127/what-is -le-formel-difference-in-scala-entre-accolades-et-parenthèses-et-quand) – soote