問題タブ [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.
java - 可変または不変のメソッドへのアクセスを制限するにはどうすればよいですか?
新しいJavaプロジェクトでは、可能な限り多くのベストプラクティスを適用しようとしています。私が問題を抱えているのは不変性です。概念を理解し、すでにいくつかの不変クラスを構築しましたが、今では、可変クラスとして実行する方が適切だと思うクラスに到達しました。
主な問題は、場合によってはクラスの可変部分を非表示にして、MVCのビューレイヤーがオブジェクトを直接変更できず、コントローラーを経由する必要があることです。
私はそれを行う2つの方法を考えました:
すべての不変メソッドを含むインターフェース「Thing」(読み取り専用)を作成し、セッターを含むインターフェース「MutableThing」を作成します。
すべてのメソッドを1つのインターフェイスに配置し、Collections.unmodizableList(obj)メソッドのようにオブジェクトをラップして、変更メソッドへのアクセスを制限し、変更メソッドにアクセスするときに例外がスローされるようにします。
私はそれがよりきれいでよりよく設計されていると思うので最初のものを好むでしょう、しかし私はそれに1つの問題があります。「Thing」インターフェースにaddListener(l)とremoveListener(l)があるので、ビューレイヤーはそれ自体をいくつかのモデルオブジェクトのリスナーとして登録できます。しかし、「Thing」インターフェースのこれら2つのメソッドでは、それだけでは意味がなくなります。実際にデータを変更する方法がない場合、インターフェイスにデータの変更を通知するリスナーを登録する機能があるのはなぜですか?これらのメソッドを「MutableThing」インターフェイスに配置することはできますが、ビューレイヤーは「Thing」インターフェイスにしかアクセスできず、リスナーとして登録できませんでした。
これが機能しない理由は、リスナーのせいだけですが、ビューレイヤーは、モデルのリスナーとして自分自身を登録する責任が実際にありますか?コントローラがなんとかして(「MutableThing」にアクセスできる)それを行うことができれば、問題はありませんが、それを実現する方法がわかりません。
あなたは何を提案しますか?
ありがとう!
functional-programming - OCamlの可変データ
OCamlで可変データ構造を作成しましたが、アクセスしようとすると奇妙なエラーが発生します。
これが私のコードです
私がocamlトップレベルでこれを行うとき
その後、x.size
このエラーが発生します
何が問題だと思われますか?なぜこれがうまくいかないのかわかりません。
ありがとう、ファイサル
c# - C#で不変オブジェクトから派生した可変オブジェクトを作成する方法はありますか?
変更できないプロパティを持つ不変クラスと、そこから派生する可変クラスを作成することに興味があります。これらのオブジェクトは、データベース レコードを表す単純なデータ オブジェクトであるため、プロパティの不変値のみを持ちます。
私の目標は、データベースの値に基づいてプロパティを設定し、これらのオブジェクトの読み取り専用バージョンをアプリケーションに戻すことによって、データ アクセス レイヤーでオブジェクトの変更可能なバージョンを正常に作成することです。(開発者が本当に望んでいるのであれば、コードが不変オブジェクトを可変オブジェクトに明示的にキャストできるという事実には問題ありません。)
ゲッターとセッターのメソッドを使用し、ミュータブル クラスのパブリックな新しいセッターを使用して、これを醜く行うことができます (それは単語ですか?)。
可能であれば、自動プロパティを使用することをお勧めします。デバッグ時には、自動プロパティの方がはるかに優れています。それ以外は、コードがどのように見えるかはあまり気にしません。すべてコード ジェネレーターから取得され、決して見られることはないからです。
何か案は?
iphone - Monotouch で NSArray を使用する
C#(Monotouch)でNSArrayオブジェクトに項目を挿入するには? そうするための適切な方法が見つかりませんか?Objective-C 側には「initWithObjects」というコンストラクタがありますが、C# 側ではこれが見つかりません。
ポンポン
f# - この可変ツリーをどのように不変ツリーに変換しますか?
タイプノードを不変のツリーにどのように変換しますか?
このクラスは、重複または隣接する範囲を許可せず、代わりにそれらを結合する範囲ツリーを実装します。たとえば、ルートノードが{min = 10; max = 20}
正しい子であり、そのすべての孫が21より大きい最小値と最大値を持っている必要があります。範囲の最大値は最小値以上である必要があります。これをそのまま実行できるようにテスト関数を含めました。失敗した場合はすべてダンプされます。
このコードを読むには、Insertメソッドから始めることをお勧めします。
Rangeのテストケース
これは答えではありません。
ジュリエットのコードに対して実行するようにテストケースを調整しました。多くの場合失敗しますが、いくつかのテストに合格しているようです。
python - PythonでN*N*Nリストを作成する際の問題
次のように、Pythonで3次元のNNNリストを作成しようとしています。
残念ながら、これは私が思っていたように、リストを適切に「複製」していないようです。
私はここで何が間違っているのですか?
algorithm - シーケンス内のオカレンスを可変または不変の状態に置き換える効率的な手法
Op
a 内の一連の出現を見つけるための効率的な a 手法を探していますSeq[Op]
。出現が見つかったら、その出現を定義済みの置換に置き換え、リストが変化しなくなるまで同じ検索を再度実行したいと考えています。
シナリオ:
3 種類のOp
ケース クラスがあります。Pop()
拡張Op
し、Push()
拡張Op
し、 Nop()
拡張しますOp
。Push(), Pop()
の発生をに置き換えたいNop()
。基本的に、コードは次のようになりますseq.replace(Push() ~ Pop() ~> Nop())
。
問題:
を呼び出しseq.replace(...)
たので、シーケンス内で の出現を検索する必要がありPush(), Pop()
ます。ここまでは順調ですね。発生を見つけます。しかし今、私は出現をリストからスプライスし、置換を挿入する必要があります.
現在、2 つのオプションがあります。私のリストは変更可能または不変です。不変リストを使用する場合、これらのシーケンスのサイズは通常 500 以上の要素であるため、パフォーマンスが心配です。多くのオカレンスを置き換えるとA ~ B ~ C ~> D ~ E
、多くの新しいオブジェクトが作成されます。間違っていなければ。ただし、のような可変シーケンスを使用することもできますListBuffer[Op]
。
基本的に、リンクされたリストのバックグラウンドから、ポインター曲げを行うだけで、合計 4 つの操作の後、新しいオブジェクトを作成せずに置換が完了します。だからこそ、私は今、パフォーマンスについて心配しています。特に、これは私にとってパフォーマンスが重要な操作であるためです。
質問:
メソッドを Scala 方式でどのように実装しreplace()
ますか? また、これがパフォーマンス クリティカルな操作であることを念頭に置いて、どのような種類のデータ構造を使用しますか?
正しい方向または疑似コードに私を向ける答えに満足しています。完全な置換メソッドを記述する必要はありません。
ありがとうございました。
data-structures - scalaでファイルから不変のデータ構造を読み取る方法
それぞれが一連のタスクを含むジョブで構成されたデータ構造があります。Job と Task の両方のデータは、次のようなファイルで定義されます。
オブジェクトを作成するプロセスは次のとおりです。
- 各ジョブを読み取り、ID で作成して保存し
ます - タスクを読み取り、ID でジョブを取得し、タスクを作成し、タスクをジョブに保存します
ファイルが読み込まれると、このデータ構造は決して変更されません。したがって、ジョブ内のタスクが不変セットに格納されることを望みます。しかし、効率的な方法でそれを行う方法がわかりません。(注: ジョブを格納する不変のマップは、不変のままにすることができます)
コードの簡略版は次のとおりです。
いつもご提案ありがとうございます。