Khi tôi gọiBản đồ Scala có phải là lười biếng không?
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()
với fn
có một tuyên bố gỡ lỗi in bên trong, tôi nhận được kết quả này:
Before
...head item...
After
...debug print statement from fn...
...debug print statement from fn...
Tôi không hiểu tại sao những điều khoản debug in đang được gọi sau "Sau khi" được in và tôi không hiểu tại sao tôi lại nhận được hai lần --- trừ khi mapValues
tạo bản đồ lười biếng?
Tính năng quan trọng là bạn không cần phải phục hồi bản đồ sau 'mapValues', bởi vì các phím không thay đổi. Với ví dụ 'map' từ bạn, trình biên dịch không thể đảm bảo. – dveim