問題タブ [mutability]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
463 参照

python - この矛盾を説明してください

2 つの方法を次に示します。1 つは変数 x を変更し、もう 1 つは変更しません。これがなぜなのか説明していただけますか?

0 投票する
1 に答える
111 参照

python - Python の可変性を理解する

私はこのスニペットを持っています:

この:

の初期化は、 の可変性を決定する際にどのようbな役割を果たしていaますか?

0 投票する
5 に答える
2271 参照

scala - Scala で可変変数を削除する方法はありますか、それとも以下の場合に可変変数を保持しても問題ありませんか?

Scala が不変性を完全に受け入れていることは理解しています。

今、クラスなどで(変数を介して)何らかの状態を保持する必要があるというシナリオを考えています。これらの変数は後で更新する必要があります。後でクラスに戻って、更新された変数にアクセスできます。

非常に単純な例を 1 つ使用して、簡単に説明します。

……

ご覧のとおり、x を変更し続けて結果を取得する必要があります。次のような計算の引数として x を単純に保持できると主張する場合

それは良い考えですが、x の設定値と結果の計算を完全に分離する必要があるため、私の場合はできません。言い換えれば、x 値を設定しても「計算」が開始されるべきではありません。むしろ、プログラム内でいつでも x 値を設定でき、必要なときにプログラム内で計算のために値を再利用できる必要があります。 .

この場合、変数 (var x: Int) を使用しています。これは正当なものですか、それとも不変の処理方法がまだありますか?

0 投票する
2 に答える
914 参照

types - OCaml可変バリアント型

Caml Light のマニュアルでは、可変バリアント型について 37 ページで言及しています。

しかし、この拡張機能は OCaml の一部ではないようです。OCaml で変更可能なバリアント型を定義する唯一の方法は、変更可能なレコードまたは配列を使用することです。

編集:変更可能なレコードのショートカットである参照を使用することを提案する@gascheに感謝します:

0 投票する
2 に答える
1446 参照

variables - ラケットに変数を割り当てる(変数突然変異)

式を指定して実行する次の関数があります。

私が次のことをした場合:

display(x) に 18 を表示させたいのですが、基本的に、指定された式の値を指定された変数に戻すにはどうすればよいですか?

0 投票する
1 に答える
134 参照

scala - Scala: インデックス付きシーケンスの可変性と、可変に変換して戻すときに何が起こるか

最近、このシナリオに何度か遭遇しました。

  1. クラスには不変の(インデックス付き?)シーケンスメンバーがあります
  2. ファクトリ メンバー メソッドは、シーケンスが多少変更された新しいインスタンスを作成します。

これを行う効率的な方法は何ですか?

元の xs が既に配列であった場合、 toArray がこれを返すだけでオブジェクトを変更するのではないかと心配しているため、このシーケンスをその場で変更し、.clone できるように .toArray を実行します (つまり、不変になることを意味します)。 ) 値。ただし、 xs が配列でない場合、これは明らかに 2 つのコピーを作成するので、それは避けたいと思います。明らかに、その型をチェックすることもできますが、それは非常に洗練されていないようで、配列をラップできる他の可変シーケンスに対してチェックする必要があるかどうかはよくわかりません。どうする?

0 投票する
4 に答える
724 参照

f# - 可変値と不変値の再定義の違いは何ですか?

F# の値は不変であると読みました。しかし、値の定義を再定義するという概念にも出くわしました。これは、以前のものに影を落としています。これは変更可能な値とどう違うのですか? これは単なる理論上の構成要素としてではなく、変更可能な値をいつ使用し、代わりにいつ式を再定義するかについてアドバイスがあればお願いします。または、後者が慣用的な f# ではないことを誰かが指摘できる場合。

再定義の基本的な例:

更新 1:

以下の回答に加えて、最上位レベルの Fsharp インタラクティブでの再定義は、異なる終端でのみ許可されます。以下は fsi でも同様にエラーになります:

一方、let バインディングでは再定義が可能です。

更新 2: 実質的な違い、クロージャーは変更可能な変数では機能しません:

更新 3:

参照を使用して副作用をモデル化できますが、たとえば:

再定義と変更可能なキーワードの使用の実際的な違いは、クロージャーでの使用方法の違いに加えて、まったくわかりません。たとえば、次のようになります。

別の考え: スレッドの操作方法がわかりませんが、(a) 別のスレッドが let バインディング内の可変変数の値を変更できるか、(b) 別のスレッドが a 内の値の名前を再バインド/再定義できるか束縛させます。私は確かにここに何かが欠けています。

更新 4: 最後のケースの違いは、ネストされたスコープからミューテーションが引き続き発生するのに対し、ネストされたスコープでの再定義/再バインドは、外部スコープからの定義を「シャドウ」することです。