問題タブ [immutability]

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

objective-c - Objective-C「不変オブジェクトに送信された変更メソッド」エラー

私はobjective-cが初めてで、iPhone用の小さなアプリを作成しようとしています。
ここで、この小さなエラーを除いて、ほぼ完了です。実際、適切な解決策を見つけるためにGoogleで何時間も検索しましたが、残念ながら機能する解決策を見つけることができません.
ここでこのチュートリアルを使用して UITableView を構築しています: UITableView チュートリアル 完全なエラー メッセージは次のようになります。

* キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了します。理由: '* -[NSCFArray insertObject:atIndex:]: 変更メソッドが不変オブジェクトに送信されました'

これはデータ コントローラー ヘッダーです: MyLinksDataController.h

データ コントローラー メソッド: MyLinksDataController.m

-------------------------------ソースコードの後半で-------------- --------------------

どんな助けでも大歓迎です。

よろしくお願いいたします。

ダニエル

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

java - 可変クラスまたは不変クラス?

不変クラスがスケーラビリティを向上させ、可能な限り不変クラスを作成することをお勧めする設計書を読んだことがあります。しかし、不変クラスはオブジェクトの増殖を増加させると思います。では、スケーラビリティを向上させるために、不変クラスを使用するのが良いですか、それとも静的クラス (すべてのメソッドが静的なクラス) を使用する方が良いでしょうか?

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

c# - 不変性とXMLシリアル化

初期値が設定されると不変のクラスがいくつかあります。Eric Lippertは、これを1回限りの不変性と呼んでいます。

C#でwrite-once不変性を実装することは、通常、コンストラクターを介して初期値を設定することを意味します。これらの値は、読み取り専用フィールドを初期化します。

ただし、XmlSerializerまたはDataContractSerializerのいずれかを使用して、このようなクラスをXMLにシリアル化する必要がある場合は、パラメーターのないコンストラクターが必要です。

この問題を回避する方法について誰かが提案を持っていますか?シリアル化でうまく機能する他の形式の不変性はありますか?

編集:@Toddが指摘したように、DataContractSerializerはパラメーターなしのコンストラクターを必要としません。MSDNのDataContractSerializerドキュメントによると、 DataContractSerializerは「ターゲットオブジェクトのコンストラクターを呼び出しません」。

0 投票する
3 に答える
272 参照

.net - .NETのHashtableを使用して、ポインターを不変オブジェクトにマップします

文字列を使用してクラス内のさまざまなフィールドに「名前を付ける」または「マップする」Hashtableオブジェクトがあります

このクラスは実行時に変更されるため、タイプとサイズはどちらも2になります。

さらに進んで、ハッシュテーブルにクエリを実行しましたが、値は変更されませんでした。不変だからだと思います。参照の値を格納する代わりに、クラスのフィールドへのポインターを保持するようにハッシュテーブルを指定する方法はありますか?

生のintの代わりにカスタムオブジェクトを保持するようにクラスInterruptを変更できることは知っていますが、それは多くのリファクタリングを必要とします。

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

functional-programming - 効率的な不変マップの実装?

次のマップの実装があるかどうか疑問に思っています。

  • Immutableであるため、関数型プログラミングで使用でき、トランザクションと同時実行性を簡単に確保できます。
  • 速い。Binary Search Trees (RB、AVL) と Tries をチェックしましたが、どれも Hash Tables ほど高速ではないようです。一定時間の更新と取得をサポートするマップの実装はありますか? (または少なくとも非常に高速な対数時間)

要するに、Hash Maps と同等のパフォーマンスを発揮できる機能的なデータ構造はありますか?

0 投票する
10 に答える
127647 参照

c# - C# で複数の文字列要素を置き換える

これを行うより良い方法はありますか...

文字列クラスを拡張して 1 つのジョブに抑えましたが、もっと簡単な方法はありますか?


楽しみのために(そしてコメントでの議論を止めるために)、以下のさまざまな例のベンチマークの要点を押し込みました。

https://gist.github.com/ChrisMcKee/5937656

正規表現オプションのスコアはひどいものです。辞書オプションが最も速く表示されます。stringbuilder replace のロング ワインド バージョンは、ショート ハンドよりもわずかに高速です。

0 投票する
3 に答える
400 参照

c# - C#でのオブジェクトの不変プロパティ

オブジェクトのリスト(可能なすべてのタイプ)を並べ替えて、オブジェクトが破壊されない限り、オブジェクトに何が起こっても順序が同じになるようにする方法を探しています(したがって、hashCodeはお勧めできません)一部のクラスでは時間の経過とともに変化するため)、そのため、メモリ内のオブジェクトのアドレスを使用することを考えていましたが、これが常に同じであるかどうかはわかりません(ガベージコレクションでアドレスを変更できますか?実例?)。ただし、オブジェクトが破棄されない限り同じ状態を維持する(任意のタイプの)オブジェクトのプロパティを探しています。それらのいずれかがありますか?はいの場合、それらは何ですか?

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

f# - 外部アセンブリの構造体のパブリック読み取り専用メンバーへのアクセス

public readonlyF#を使用してC#アセンブリで定義された構造体型のメンバーを読み取ると、奇妙なエラーが発生します。

Client.exeをF#1.9.6.16でコンパイルすると、最後の行に次のエラーが表示されます。

この記事の執筆時点では、Webは役に立たない。クラスの不変のメンバーを読み取ることができ、構造体の可変のメンバーを読み取ることができるのに、構造体の不変のメンバーを読み取ることができないのは奇妙に思えます。回避策は簡単ですが、興味があります。これはコンパイラのバグですか?

編集:バグレポートをfsbugs@microsoft.comに送信しました

0 投票する
3 に答える
2031 参照

python - コピーオンライトを備えた純粋に機能的なデータ構造?

機能的なデータ構造 (構造を共有できる複数のバージョンのデータ) の利点を生かしながら、命令型のスタイルで変更できるようにしたい。

私が考えていること (および考えられる用途): ゲーム履歴全体が保存される RPG ゲーム (たとえば、時間をさかのぼることができるようにするため)。コピー オン ライトを使用して、ゲームの状態を保持する構造を単純に複製し、新しいターンを導入することでそれを変更することができました。毎回すべてをコピーしなければならないというペナルティ。


foo地図だとしましょう。

fooの構造 (ツリーなど) はまだコピーされていません。ただし、bar今後はコピーとして扱われ、変更が「foo」に伝播することは許可されません。

  • の変更されたコピーである新しいオブジェクトが作成されますbaz
  • barは新しいマップに置き換えられ、newが保持されbazます (おそらくfooの構造の一部が保持されます)。
  • foo影響を受けません。

しかし、もしそうなら...

...baz最新バージョンがあるため、変更するだけです。bar 変更する必要はありません。

fooこれにはすべて、とに関するいくつかのバージョン情報を保持し、barでそれを増やし、何らかの形で (プロキシ オブジェクトにすることで?) にfoo.clone()渡す必要があります。baz

また、複製された構造の一部は「履歴の一部」になり、それ以上変更することはできず、実行時に強制することができます。


これは JavaScript のプロトタイプに少し似ていますが、変更が上方に伝播できるため、より似ています。バージョン管理システムのようなものになると思います。

  • これは行われましたか、またどの程度行われましたか?
  • これは良い考えですか?そうでない場合、保存する方法はありますか?
  • どのように実装できますか?Python のような高水準の GC 言語の上に構築することを考えていました。