愚かになるかもしれませんが、私はScala Streamの評価に関して不変の方法で質問しています。Scalaストリームで不変性がどのように達成されていますか?
私はこのようなストリームを持っていると言います(すべての行はreplで実行されます)。
val a = Stream(1,2,3,4,5,6,7,8,9,10);
:scala.collection.immutable.Stream [INT] =ストリーム(1?)
Iは、次の行を実行します。
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)
変数「」と'b'は依然としてまだリストです(1,2,3,4,5)
これはどうやって起こったのですか、私の欠点は何ですか?