2017-08-22 4 views
0

Je suis un cours de martin odesky. Et il y a un exemple où il applique flatMap à String et obtient une chaîne en retour mais je reçois un vecteur. Voici le code que j'utiliseScala FlatMap retournant un vecteur au lieu d'une chaîne

val str = "Hello" 
println(str flatMap (x => List("." , x))) 

output: Vector(., H, ., e, ., l, ., l, ., o) 
outputExpected: .H.e.l.l.o.w 

enter image description here

Répondre

1

Une chaîne est une collection de caractères, et non une collection de chaînes. Ainsi, lorsque vous utilisez flatMap pour créer une collection de caractères, il choisit String comme type de collection, mais lorsque vous créez une collection de chaînes, il ne peut pas utiliser String, il doit donc utiliser Vector à la place.

2

"." est un String tandis que '.' est un Char.

List('.', x) est un List[Char] (si x est un Char) qui peut être aplati pour une String.

List(".", x) est un List[Any] (si x est pas un String) qui ne peut être aplati à un String.

+0

c'est une excellente réponse, scala est amusant seulement si vous savez – pannu