Kiedy zadzwonićCzy Scala mapWartość leniwy?
System.err.println("Before")
System.err.flush()
val foo: Map[Int, T] = t mapValues (fn(_))
System.err.println(foo.head) //prevent optimiser from delaying the construction of 'foo'
System.err.println("After")
System.err.flush()
z fn
o instrukcji print debugowania wewnątrz, otrzymuję ten wynik:
Before
...head item...
After
...debug print statement from fn...
...debug print statement from fn...
ja nie rozumiem, dlaczego sprawozdanie wydruk debug są nazywane po „po” jest drukowany i nie rozumiem, dlaczego otrzymuję go dwukrotnie, chyba że mapValues
tworzy leniwą mapę?
Najważniejszą cechą jest to, że nie trzeba ponownie mapować mapy po 'mapValues', ponieważ klucze się nie zmieniły. W przypadku 'map' z przykładu, kompilator nie może dać gwarancji. – dveim