問題タブ [mutable]

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 投票する
2 に答える
22899 参照

c++ - ミューテックスは変更可能である必要がありますか?

これがスタイルの質問なのか、それとも難しいルールがあるのか​​わからない...

パブリックメソッドインターフェイスを可能な限り一定に保ちながら、オブジェクトスレッドを安全にしたい場合は、可変ミューテックスを使用する必要がありますか?一般に、これは優れたスタイルですか、それとも非constメソッドインターフェイスを優先する必要がありますか?あなたの見解を正当化してください。

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

constants - Dの論理定数

Dには2つのタイプの不変性があります。不変変数は不変であると宣言されたものであり、常に不変ですが、const変数は単にオブジェクトの読み取り専用バージョンです。

論理constは、関数がconstとしてマークされている場合ですが、1つ以上のメンバー変数への書き込みアクセスを許可します。これの典型的な使用法は、遅延評価です。たとえば、(C ++で)

ここでdeterminant()は、ですが、const変更することができ、それらが。としてマークされているためです。m_dirtym_determinantmutable

D const(FAQ)は、D2が提供する保証が弱いため、論理constをサポートしないと述べています。これは、並行プログラムの作成の妨げとなり、特定の最適化をより困難にします。

私は懸念を完全に理解していますが、論理定数が必要な場合はどうなりますか?

上記の場合をクラスで考えてみましょうMatrix。ただし、キャッシュはありません(そして論理定数は必要ありません)。また、このクラスが私のコードベース全体で使用されており、ほとんどがconst参照を介してアクセスされていることを想像してみてください。

ここで、プロファイリングにより、determinant()関数がコードのボトルネックであることが明らかになり、さらに、通常は値が変更されることはめったになく、繰り返しアクセスされます。つまり、上記のように、キャッシュは完全に最適化されます。

論理定数なしでそれを行うにはどうすればよいですか?コードベース全体に行き、const参照をnon-const参照に変更することは、オプションではありません(明らかな理由から)。

(もしあれば)どのようなオプションがありますか?

0 投票する
8 に答える
17643 参照

c++ - C++の「可変関数」の正しい代替手段

C ++のクラスでアルゴリズムをラップするときに、constの正確性に問題が生じることがよくあります。許可されていませんが、可変関数が欲しいと思います。次のようなクラスの実装方法を教えてもらえますか?

以下は私が書き たいコードです。

  • run()関数は、データを変更するため、const関数であってはなりません。
  • 関数get_result()は、データを返すため、(ユーザーに関する限り)定数関数である必要があります。

ただし、ユーザーがrun()を呼び出さずに結果を要求した場合は、get_result()関数でアルゴリズムを実行する必要があります。非const関数を呼び出すconst関数があるため、これはconstの正確性を損ないます。

上記のクラスをコンパイルすることができた唯一の方法は、次のいずれかです。

  • run()をconstにし、m_dataとm_completedを可変にします。これは機能しますが、run()が明らかにデータを変更するため、概念的には間違っています。
  • get_result()を定数関数にしないでください。これも間違っているように見えます。ユーザーは、この関数が単純な戻り値であり、したがって一定であると期待するからです。
  • run()関数をget_result()const関数に入れ、データ変数を変更可能にします。

私の理解では、mutableキーワードはこれらのオプションの3番目用に設計されており、実装ではデータを変更する必要がありますが、ユーザーは単純な戻り値、したがってconst関数を合理的に期待しています。

ただし、ユーザーがデータを変更するタイミングを正確に選択できるようにするため、この最後のオプションは実行しません。ただし、run()の呼び出しを忘れる可能性があるため、run()を呼び出さずに結果を要求した場合は、アルゴリズムを強制したいと思います。run()を可変にしたいように感じますが、許可されていません。

そのようなクラスを書く正しい方法は何ですか?

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

c# - プロパティと変数の違い

このコードは完全に機能します。

同時に、これはコンパイルエラーを引き起こします(「変数ではないため、pの戻り値を変更できません」):


違いは何ですか?

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

python - 内部で自己を再インスタンス化する機能を持つ Python サブクラスのタプル オブジェクト

Python の可変オブジェクトと不変オブジェクトの概念を理解しています。問題ありません。不変オブジェクトの固有値を直接変更することはできませんが、不変オブジェクトのインスタンスは別の値で再インスタンス化できます。私がやりたいのは、制御された方法で独自の値を再割り当てできるタプルのサブクラスに内部関数を構築することです。これは、私が見つけられないように見える基本的な機能である可能性があり、助けていただければ幸いです。

たとえば、これが私ができるようにしたいことですが、これは明らかに機能しません。

以下の結果で...

このサイトでこのような質問に対する多数の回答を読んだことから、「なぜこれをやりたいのですか?」と答える傾向がある人もいると思います。しかし、実際にそうである場合は、おそらく「絶対にできない、どうやってもできない」など、より直接的な回答で応答スペースを節約しましょう。

どうもありがとうございました!

編集、以下の回答をありがとう、これが私が最終的に得たものです...

あなたが見ることができる上記の改善/調整は投稿してください. AttributeError 発生の重複を組み合わせることができるようですか?

0 投票する
7 に答える
63795 参照

java - JavaにはInteger、Float、Double、Longの可変型がありますか?

Integer などの変更可能なバージョンを使用したい状況にあります。これらのクラス (以下) を使用する必要がありますか、それとも Java には何かが組み込まれていますか?

http://www.java2s.com/Code/Java/Data-Type/Amutableintwrapper.htm

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

scala - Scalaに変更可能なTreeMapがないのはなぜですか?

時間の不足、技術的な問題、それとも存在してはならない理由があるのでしょうか。

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

java - 可変オブジェクトでのvolatileキーワードの使用

volatileJavaでは、キーワードが変数の可視性を提供することを理解しています。問題は、変数が可変オブジェクトへの参照である場合、volatileそのオブジェクト内のメンバーにも可視性を提供するかどうかです。

volatile Mutable m以下の例では、複数のスレッドがアクセスして変更している場合、正しく機能しvalueますか?

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

.net - usingステートメント内のクロージャー内で可変構造体変数をキャプチャすると、ローカルの動作が変わるのはなぜですか?

更新:まあ、今私は行ってそれをしました:私はそれが正しい振る舞いであると真剣に疑っているので、これについてマイクロソフトにバグレポートを提出しました。とはいえ、この質問に関して何を信じるべきかはまだ100%わかりません。ですから、「正しい」ものはある程度の解釈に開かれていることがわかります。

私の考えでは、Microsoftはこれがバグであることを受け入れるか、usingステートメント内の可変値型変数の変更が未定義の動作を構成すると応答します。

また、その価値については、少なくともここで何が起こっているのかについては推測できます。コンパイラがクロージャのクラスを生成し、ローカル変数をそのクラスのインスタンスフィールドに「リフト」しているのではないかと思います。usingブロック内にあるので、フィールドを作成していますreadonlyLukeHが他の質問へのコメントで指摘したように、これにより、フィールド自体の変更などのメソッド呼び出しが防止さMoveNextれます(代わりにコピーに影響します)。


注:読みやすさのためにこの質問を短くしましたが、まだ正確に短いわけではありません。元の(長い)質問全体については、編集履歴を参照してください。

ECMA-334の関連セクションであると私が信じていることを読み通しましたが、この質問に対する決定的な答えを見つけることができないようです。私は最初に質問を述べ、次に興味のある人のためにいくつかの追加のコメントへのリンクを提供します。

質問

を実装する可変値型がある場合は、IDisposable(1)usingステートメント内のローカル変数の値の状態を変更するメソッドを呼び出すことができ、コードは期待どおりに動作します。ただし、ステートメント内のクロージャusingで問題の変数をキャプチャすると、(2)値への変更はローカルスコープに表示されなくなります。

この動作は、変数がクロージャー内およびusingステートメント内でキャプチャされた場合にのみ明らかになります。using1つ( )または他の条件(閉鎖)のみが存在する場合は明らかではありません。

ステートメント内のクロージャー内で可変値型の変数をキャプチャすると、usingそのローカル動作が変わるのはなぜですか?

以下は、項目1と2を示すコード例です。どちらの例も、次のデモンストレーションMutable値タイプを利用します。

1.usingブロック内の値型変数の変更

出力コードは以下を出力します:

using2.ブロック内のクロージャ内の値型変数をキャプチャする

上記のコードは次のように出力します。

さらなるコメント

Monoコンパイラは、私が期待する動作を提供することに注意してください(ローカル変数の値への変更は、using+クロージャの場合でも表示されます)。この振る舞いが正しいかどうかは私にはわかりません。

この問題に関する私の考えの詳細については、こちらを参照してください。

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

python - MutableString が Python で廃止されたのはなぜですか?

Python 2.6 でMutableStringクラスが廃止されたのはなぜですか。
なぜPython 3で削除されたのですか?