difference between map and flatMap in scala -


what difference between map , flatmap? in can

1 5 map(c => println(c)) 

but not

1 5 flatmap(c => println(c)) 

on other hand, works

def h(i: int) = if (i >= 2) some(i) else none 1 5 flatmap(h) 

i understand flatmap map , flatten, not sure when map can used , when flatmap can used.

let's see signature of flatmap.

def flatmap[b](f: (int) ⇒ gentraversableonce[b]): traversableonce[b] 

and signature of map

def map[b](f: (a) ⇒ b): indexedseq[b] 

you can see result type of f must gentraversableonce[b] flatmap. there's no restriction in result type of f map.

the result type of println(x) unit , result type of x+2 int. since both not implement gentraversableonce[b], cannot flatmap(x=>println(x)) nor flatmap(x=>x+2).

on other hand some(i) , none have type of option[int], can implicitly converted iterable[int] source

the signature of iterable

trait iterable[+a] extends traversable[a] 

and traversable is

trait traversable[+a] .. traversableonce[a]` 

and traversableonce is

trait traversableonce[+a] extends gentraversableonce[a] 

hence option[int] implements gentraversableonce[int] can use result of flatmap[int]


Comments

Popular posts from this blog

node.js - Node js - Trying to send POST request, but it is not loading javascript content -

javascript - Replicate keyboard event with html button -

javascript - Web audio api 5.1 surround example not working in firefox -