Executar função de Range.map() imediamamente ao invés de lazy

4 views
Skip to first unread message

Rafael Afonso

unread,
Oct 2, 2009, 3:41:08 PM10/2/09
to scala-br
Uma coisa interessante que constatei ao utilizar a função map de Range
( http://www.scala-lang.org/docu/files/api/scala/RandomAccessSeq$object.Projection.html#map%28%28A%29%3D%3EB%29
):

scala> def aux(x: Int) = {
| println("Dobrando " + x)
| 2 * x
| }
aux: (Int)Int

scala> def f(n: Int): Unit = {
| println("vou gerar")
| val lst = (1 to n).map(aux(_))
| println("Gerado")
| lst.foreach(println(_))
| }
f: (Int)Unit

scala> f(10)
vou gerar
Gerado
Dobrando 1
2
Dobrando 2
4
Dobrando 3
6
Dobrando 4
8
Dobrando 5
10
Dobrando 6
12
Dobrando 7
14
Dobrando 8
16
Dobrando 9
18
Dobrando 10
20

Ou seja: a função aux() so seré avaliada no momento em que rodar o
corpo do foreach. Funciona como se fosse uma variável lazy. Como eu
deveria fazer se eu quisesse que a função aux() fosse executada
imediatamente ("eager")? Ou seja, para aparecer algo como:

scala> f(10)
vou gerar
Dobrando 1
Dobrando 2
Gerado
2
4

Grato,

Rafael U. C. Afonso

Rafael de F. Ferreira

unread,
Oct 2, 2009, 4:03:12 PM10/2/09
to scal...@googlegroups.com
.force
--
Rafael de F. Ferreira.
http://www.rafaelferreira.net/

2009/10/2 Rafael Afonso <rafael...@gmail.com>:

Alexei Barbosa de Aguiar

unread,
Oct 2, 2009, 4:21:00 PM10/2/09
to scal...@googlegroups.com
    Shall de force be with you! (Que a força esteja com você!) :-)
    Legal.

Rafael de F. Ferreira escreveu:
-- 
Alexei Barbosa de Aguiar
Verde Tecnologia
+55(85)8776.0801
+55(85)3474.5040
Skype: alexeiaguiar

Rafael Afonso

unread,
Oct 2, 2009, 4:44:38 PM10/2/09
to scala-br
Realmete funcionou. Obrigado! Agora outr dúvida: Na API de force()
( http://www.scala-lang.org/docu/files/api/scala/RandomAccessSeq$object.Projection.html#force
) fala que gera uma coleção "strict" enquanto que map menciona uma
coleção "non-stict". Isso seria uma forma de dizer que é não lazy e
lazy respectivamente?

Grato,

Rafael U. C. Afonso


On 2 out, 17:03, "Rafael de F. Ferreira" <rafael...@gmail.com> wrote:
> .force
> --
> Rafael de F. Ferreira.http://www.rafaelferreira.net/
>
> 2009/10/2 Rafael Afonso <rafael.afo...@gmail.com>:
>
>
>
> > Uma coisa interessante que constatei ao utilizar a função map de Range
> > (http://www.scala-lang.org/docu/files/api/scala/RandomAccessSeq$object...
Reply all
Reply to author
Forward
0 new messages