Pattern matching (for comprehensions) changement de type bizarre (compilateur)

8 views
Skip to first unread message

hervé DARRITCHON

unread,
Dec 25, 2015, 7:02:14 AM12/25/15
to Scala France
Bonjour à tous,

Mon cadeau de noël cette année, c'est faire un peu de scala donc j'en profite mais je rencontre un point que je ne comprends pas.

Dans la lecture 6-4 de Functional Programming in Scala de Coursera, il y a des bouts de code sur des Livres et l'utilisation de for comprehension pour faire du filtre.
Plutôt cool comme lisibilité.

Par contre contre je rencontre un souci sur un typage bizarre.

Si je retape ce qui est mis dans la vidéo :

for (b <- books if b.title indexOf ”Program” >= 0)
  yield b.title

Alors pas de soucis avec le typage de b.title (String) et je peux faire mon indexOf

Par contre si je passe par une variable intermédiaire :
for {
b: Book <- books
title:String <- b.title
if (title indexOf "Program") >= 0
} yield b

alors le title est de type Char et le compilateur me met une erreur si je le force à String.

Et donc si je veux que ça fonctionne, il faut faire un title.toString pour pouvoir faire le indexOf.
C'est bizarre car dans la case class Book, le title est bien un String :D

J'ai fait un Gist avec mon code pour avoir l'ensemble

Si l'un d'entre vous peut m'expliquer pourquoi ?

Ca sera mon 2ème cadeau de noël.

Merci et joyeux noël à tous,

Hervé

Jean Helou

unread,
Dec 25, 2015, 8:49:45 AM12/25/15
to hervé DARRITCHON, Scala France

Ah mais en écrivant
title<- book.title

Tu ne créés pas une variable intermédiaire ayant la valeur de title, tu itères sur les éléments contenus dans book.title

Car oui book.title est une string mais une string n'est jamais qu'une collection de caractères (Iterable[Char] voir Seq[Char])

Pour créer une variable intermédiaire prenant la valeur de la string il faudrait écrire
title=book.title
tout simplement, la flèche <- signifiant l'itération dans la collection

Jean
:)


--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes "Scala France".
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse scala-fr+u...@googlegroups.com.
Pour obtenir davantage d'options, consultez la page https://groups.google.com/d/optout.

hervé DARRITCHON

unread,
Dec 25, 2015, 9:34:55 AM12/25/15
to Scala France
rooooooh le noob que je suis :)
Effectivement, en te lisant, c'est totalement clair !

bien évidemment :d

Sans doute un excès de caractère funcky dans mon code comme les <-
En ces fêtes de fin d'années, j'ai voulu faire dans la paillette.
Ca ne me réussi pas ;)

Merci en tout cas.
Reply all
Reply to author
Forward
0 new messages