問題タブ [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.
objective-c - プロパティをオーバーライドするパターンはありますか?
Objective-C ランタイムは、宣言されたプロパティのリストを Class オブジェクトのメタデータとして保持します。メタデータには、プロパティ名、タイプ、および属性が含まれます。ランタイム ライブラリには、これらの情報を取得するための関数もいくつか用意されています。これは、宣言されたプロパティがアクセサー メソッド (getter/setter) のペア以上のものであることを意味します。私の最初の質問は、なぜ私たち (またはランタイム) がメタデータを必要とするのですか?
よく知られているように、宣言されたプロパティはサブクラスでオーバーライドできません (readwrite と readonly を除く)。しかし、私はそれが必要であることを保証するシナリオを持っています:
もちろん、コンパイラは上記のコードを通過させません。私の解決策は、宣言されたプロパティをアクセサー メソッドのペアに置き換えることです (読み取り専用の場合はゲッターのみ)。
プロパティstring
は段階的に変更され、頻繁に変更される可能性があるため、変更可能である必要があります。同じセレクターを持つメソッドは同じ戻り値とパラメーターの型を共有する必要があるという制約を知っています。しかし、上記の解決策は意味的にも技術的にも適切だと思います。セマンティックな側面では、可変オブジェクトは不変オブジェクトです。技術的な面では、コンパイラはすべてのオブジェクトをidとしてエンコードします。私の2番目の質問は、上記の解決策は理にかなっていますか? それとも単に奇妙ですか?
次のように、ハイブリッド アプローチを採用することもできます。
ただし、 のようなドット構文を使用してプロパティにアクセスするmyMutableObject.string
と、コンパイラは、アクセサ メソッドの戻り値の型が宣言されたプロパティの型と一致しないことを警告します。メッセージフォームとしてご利用いただいても構いません[myMutableObject string]
。これは、宣言されたプロパティがアクセサー メソッドのペア以上のものであるという別の側面を示唆しています。つまり、ここでは望ましくありませんが、より静的な型チェックです。3 番目の質問は、サブクラスでオーバーライドする場合、宣言されたプロパティの代わりに getter/setter ペアを使用するのが一般的ですか?
c - C の const-correctness
何かが変更可能であることが意図されていない限り、使用するのは明らかに良い習慣const
ですが、どこまで行きますか? 文字列の配列がある場合、関数の署名にこれを含める必要がありますか?
私はそれをまったく変更するつもりはないので、定数文字の配列の最初の要素への定数ポインタの配列の最初の要素への定数ポインタです。それは一口で、コードはほとんど読めません。これはすべて のような単純なデータ構造ですargv
。
const がデフォルトで、変更可能なキーワードが必要であるかのように感じます。
あなたは一般的にそれらconst
の1つだけですか?多かれ少なかれ逆参照することで簡単に変更できる場合、そのポイントは何ですか?
functional-programming - 関数型言語で変数を変更してもよいのはいつですか?
だから私はRacketSchemeを使って関数型プログラミングを自分で学んでいて、今のところそれが大好きです。私自身の演習として、純粋関数型の方法でいくつかの単純なタスクを実装しようとしています。不変性は機能的なスタイルの重要な部分であることは知っていますが、それで問題ない場合があるのではないかと思いました。
ここに示すように、フィルターとともに使用すると、関数が文字列のリストから一意でない文字列を削除する楽しい方法を考えました。
ご覧のとおりmake-uniquer
、一意性を比較するために文字列のリストのクロージャを返します。これにより、フィルタの単純な述語として機能できます。しかし、私はクローズドオーバーリストを破壊的に更新しています。これは悪い形式ですか、それともローカルのクローズドオーバー変数をそのような方法で変更しても大丈夫ですか?
python - インプレース操作でオブジェクトを返すようにするのは悪い考えですか?
ここでは主にPythonについて話していますが、これはおそらくほとんどの言語に当てはまると思います。可変オブジェクトがある場合、インプレース操作でオブジェクトも返すようにするのは悪い考えですか?ほとんどの例では、オブジェクトを変更してを返すだけのようNone
です。たとえば、list.sort
。
python - python - クラスの可変性
私は試験から以下のコードを取得しましたが、最初に変更f2 = f1
を行ったときになぜ設定がまったく変更されないのか理解できません。誰かが理由を知っているなら、私に説明してください。どうもありがとう!f1.set()
f2
f1 = Foo("Nine", "Ten")
f2
コード:
結果:
python - forループでサブリストが変更可能なのはなぜですか?
私はPythonの初心者であり、可変性については非常にわかりにくく、直感的ではありません。リストが与えられた場合:
そして、for ループ内でリストを変更しようとしています。
これによりリストが変更されないことを理解しています。しかし:
サブリストを参照すると、次の結果が得られたことに驚きました。
ビジュアライザーで理解しようとしましたが、わかりません。誰か平易な言葉で説明してくれませんか?ありがとうございました。
c++ - ミュータブルファンクターはまだ「有効」で使用できますか
見た後const と mutable を知らないあなたはmutable
、今後適切に処理する方法に少し困惑しています。const
の場合はかなり安全だと思いますが、デフォルトで物理的な読み取り専用 (古いロジックの例外を差し引いたもの) を想定しているため、適切に処理することはmutable
私を困惑させます。たとえば、新しい threadsafe-condition では、次は間違っているようです。
この場合、別の方法で同時書き込みによって保護されるか、またはのコピーにn
ラップする必要があると思います!?std::atomic
n
object - Rust (0.5 および/またはトランク) では、可変オブジェクトの可変ベクトルを作成するにはどうすればよいですか?
次のコードがあります(カットダウンの例として):
"unresolved name ItemList"
これらの関数を実装しようとすると、ポインター/可変タイプ ( &~mut
vs~mut
など)間の競合やエラーが発生し続けます。
誰かが空のオブジェクトを割り当てて返すだけのカットダウンの例を教えてもらえますか? そこから、データを入力できるはずです。
c# - C# の可変性 - VS コード分析で CA2104 が返されますか? どうやら... 貧しい。私は誤解していますか?
C# では、"スマートな" 列挙型を作成したいと考えています。Java では、基になる int 値だけでなく、列挙型値に関連付けられた情報が多くあるようなものです。次の簡単な例のように、(列挙型の代わりに)クラスを作成するスキームに出くわしました。
しかし、その上で Visual Studio の「コード アナライザー」を実行すると、警告 C2104、「読み取り専用の変更可能な参照型を宣言しないでください」が表示されます。
一般に、読み取り専用の可変参照型を宣言したくない理由はわかりますが、... 私のクラスは可変ではありませんか?
警告のドキュメントを読むと、読み取り専用の参照型は変更可能であると想定しているようです。たとえば、型が本当に不変である場合は、この警告を抑制してもかまいません。実際、次のさらに単純なクラスについても同じ警告が表示されます。
私が可変性を真剣に誤解していない限り、CA2104 はそれを理解していません。そして、クラスが本当に不変であると確信している限り、警告が表示される各行の警告を抑制することをお勧めします。しかし:
(1) したがって、このチェックを完全にオフにしない限り、不変の読み取り専用メンバーを使用するたびにチェックを抑制しなければなりません。
(2) さらに悪いことに、私がそれを行ったとしても、後で誰かが誤って可変性を導入する可能性がありますが、他の誰かは、「私がチェックし、これは不変です」と言って手動で抑制を入れたという事実によって与えられた誤った安心感をまだ持っています。 "?