問題タブ [equality]
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.
arrays - `Array(0,1,2)== Array(0,1,2)`が期待される結果を返さないのはなぜですか?
私が理解している限り、Scala==
は2つのオブジェクトの自然な平等を定義しています。
Array(0,1,2) == Array(0,1,2)
私はそれが自然の平等を比較することを期待しました。たとえば、他の配列の対応する要素と比較したときに、配列のすべての要素がtrueを返すかどうかを確認します。
人々は、Scalaはアイデンティティを比較するArray
だけのJavaだと私に言いました。代わりに、自然の平等を比較するためにのメソッドを[]
オーバーライドする方が意味がありませんか?Array
equals
haskell - 関数を等しい値に適用すると異なる結果
Haskell を少し掘り下げて、テキスト内の 2 つの単語のファイ係数を計算することから始めました。ただし、説明できない非常に奇妙な動作に遭遇しました。
すべてを取り除いた後、問題を再現するために次のコードになりました。
これは以下を出力します:
したがって、sumTup
とsumFixTup
は等しいように見えますが、 に渡されると動作が異なりphi
ます。
の定義phi
は次のとおりです。
c# - C# の文字列等値演算子は false を返しますが、それは true であるべきだと確信しています...何ですか?
大量のテキストを生成するコードの単体テストを作成しようとしています。「予想される」文字列と「実際の」文字列が等しいように見える問題に遭遇しましたが、Assert.AreEqual がスローされ、等価演算子とEquals()
戻り値の両方が false になります。の結果GetHashCode()
も両方の値で異なります。
ただし、両方の文字列をテキスト ファイルに入れ、DiffMerge と比較すると、同じであることがわかります。
さらに、Encoding.ASCII.GetBytes()
両方の値に対して を使用してから、 を使用SequenceEquals
して結果のバイト配列を比較すると、true が返されます。
値はそれぞれ 34KB なので、ここに置くのは差し控えます。何か案は?私は完全に困惑しています。
c# - 2 つの列挙可能な値の間の等価性
まったく同じ参照要素を持つ 2 つの列挙型があり、なぜ Equals が真にならないのか疑問に思っています。
副次的な質問として、各要素を比較する以下のコードは機能しますが、よりエレガントな方法が必要です
c++ - C++ は継承されたクラスに条件を適用します
抽象基本クラス X を定義し、次のことを強制したいと思います。
a) X から継承するすべての具体的なクラス Y は、コンストラクター Y(int x) を定義します
b) 2 つの Y オブジェクトが等しいかどうかをテストできる必要があります。
aの場合、あまり良くない解決策の1つは、具象クラスが定義する必要がある純粋な仮想fromIntメソッドをXに入れることです。しかし、私は建設を強制することはできません。
b)については、Xで純粋仮想メソッドを使用できないようです
bool operator == (const X& other) const =0;
オーバーライドされたクラスでは、これは未定義のままであるためです。定義するだけでは不十分
bool operator == (const Y& other) const { //stuff}
タイプが合わないからです。これらの問題を解決するにはどうすればよいですか?
f# - F#でのショートカットの同等性チェック?
F#では、等式演算子(=)は一般に、内包的ではなく外延的です。それは素晴らしいことです!残念ながら、F#はこれらの拡張比較をショートカットするためにポインターの同等性を使用していないように見えます。
たとえば、次のコードは次のとおりです。
...'a'と'a'の両方が同じ参照に評価されるという事実にもかかわらず、私に大きな脂肪セグメンテーション違反[*]を与えます。それはそれほど素晴らしいことではありません。他の関数型言語(PLTスキームなど)は、ポインター比較を控えめに使用してこれを正しく行い、ポインター比較を使用して判別できる場合は「true」を返します。
つまり、F#の等式演算子がショートカットを使用しないという事実を受け入れます。内包的(ポインターベース)の同等性チェックを実行する方法はありますか?(==)演算子は私の型では定義されていません。誰かがそれが何らかの形で利用可能であると私に言うことができれば、私はそれが大好きです。
または、状況の分析が間違っていると言ってください。私もそれが大好きです...
[*]それはおそらくWindowsのスタックオーバーフローでしょう。モノについては、私があまり好きではないことがあります...
java - Android の Java では、文字列は同じように出力されますが、同じではないようです。
私はかなり混乱している問題を抱えています。Android アプリケーションに次のコード行があります。
最初のprintlnステートメントの出力を見ると、LogCatに「開始」として表示されます(明らかに引用符なし)。しかし、if ステートメントが実行されると、else ステートメントに移動し、「いいえ、そうではありません」と出力されます。
ノードの名前に何らかの非表示文字が含まれているのではないかと考えたので、getNodeName() からの文字列の長さを確認したところ、予想どおり 5 文字でした。
ここで何が起こっているのか誰にもわかりませんか?
java - hibernate/webappのコンテキストでのオブジェクトの同等性
hibernateによって管理されるJavaオブジェクトのオブジェクトの同等性をどのように処理しますか?「hibernateinaction」の本では、代理キーよりもビジネスキーを優先する必要があると述べています。
ほとんどの場合、私はビジネスキーを持っていません。人にマッピングされたアドレスについて考えてみてください。アドレスはセットに保持され、Wicket RefreshingViewに表示されます(ReuseIfEquals戦略を使用)。
サロゲートIDを使用するか、equals()およびhashCode()関数のすべてのフィールドを使用することができます。
問題は、これらのフィールドがオブジェクトの存続期間中に変更されることです。ユーザーがデータを入力したか、OSIV(Open Session in View)フィルター内でJPA merge()が呼び出されたためにIDが変更されたためです。
equals()およびhashCode()コントラクトについての私の理解は、これらはオブジェクトの存続期間中に変更されるべきではないということです。
私がこれまでに試したこと:
- equals()は、データベースID(または、idがnullの場合はsuper.hashCode())を使用するhashCode()に基づいています。問題:新しいアドレスはnull IDで始まりますが、人に接続されるとIDを取得し、この人はosiv-filterでmerge()(再接続)されます。
- hashCode()が最初に呼び出されたときにハッシュコードをレイジー計算し、そのハッシュコードを@Transitionalにします。merge()が新しいオブジェクトを返し、ハッシュコードがコピーされないため、機能しません。
私が必要とするのは、オブジェクトの作成中に割り当てられるIDだと思います。ここでの私の選択肢は何でしょうか?追加の永続プロパティを導入したくありません。オブジェクトにIDを割り当てるようにJPAに明示的に指示する方法はありますか?
よろしく
.net - パワーシェルテストの -eq キーワードは、等価性を参照するか、Object.Equals() を使用しますか?
Powershell の "-eq" は等価性をテストしますか (C# の "==" のように)、または Object.Equals() の呼び出しと同等のことを行いますか?
java - 簡単な質問: 以下の Java プログラムの出力
上記のプログラム出力が 3 なのはなぜですか?
編集
以下のコメントを見て、質問を拡張しています:
System.out.println (s1 == s2);
s1 と s2 は同じオブジェクトを参照していますか? 上記のステートメントは true を出力するはずですが、その出力は false です。
ハッシュコードに関しては似ていますが、それでも違いますか?