它可能會變得很愚蠢,但我對以不可變方式評估Scala流評估有疑問。假設我有一個像這樣的Stream(所有行在repl中執行);Scala流如何實現不變性?
val a = Stream(1,2,3,4,5,6,7,8,9,10);
一個:scala.collection.immutable.Stream [INT] =流(θ1,)
當運行下面的行;
a(3);
a
我得到了;
scala.collection.immutable.Stream [INT] =流(1,2,3,4,?)
第一個問題是如何這個不可變結構得到改變?我的意思是如果這樣做(假設變量'a'定義爲'var'); a = a(3)我可能會期待這樣的結果。
我的另一個問題是,當我跑下面的線;
val a = Stream(1,2,3,4,5,6,7,8,9,10);
一個:scala.collection.immutable.Stream [INT] =流(1,θ)
val b = a;
B:scala.collection.immutable.Stream [INT] =流(1,θ)
b(5);
scala.collection.immutable.Stream [INT] =流(1,2,3,4,5,6,?)
a
scala.collection.immutable.Stream [INT] =流(1,2,3,4,5,6,?)
正如你可以在最後部分看到執行'a'後,它似乎又改變了。
如果我嘗試這種與列表類型分配(據我所知名單是流的嚴格的版本)和不喜歡滴一些改造,採取等)
val a = List(1,2,3,4,5)
val b = a;
b.dropRight(1)
變量「a」和'b'仍然是列表(1,2,3,4,5)
那麼這是怎麼發生的以及我錯過了什麼?