問題タブ [referenceequals]

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 に答える
189 参照

ocaml - When are physically distinct values created in OCaml?

I'm trying to understand what the physical equality operators (Pervasives.(==) and Pervasives.(!=)) mean in OCaml.

The language manual says that the expression "" is a "constant", not an "expression":

6.5 Constants

constant ::== ... string-literal

but I can't find any verbiage indicating that constants are singly/pre-evaluated or pooled, and the REPL indicates that mutable string values are (thankfully) not pooled.

Section "19.3 Representation of OCaml data types" suggests that the language specification requires that bools, ints, chars, the unit value, simple variants, and empty lists are selfless.

Does an implementation have to behave as above to be a complying OCaml implementation?

Can a complying OCaml implementation rewrite the pointer at b to point to a when a = b (* structurally *) is true and both are values of an immutable type (or effectively immutable values like zero length strings/arrays) as is sometimes done to reduce the number of reachable younger values in a generational GC?

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

hash - Hashtbl.hash に代わる物理的 ID ベースの代替手段

構造化された値を記述する Graphviz ファイルを取得しようとしています。これは診断目的であるため、グラフにメモリ内の実際の構造をできるだけ厳密に反映させたいと考えています。以下を使用して値を Graphviz 頂点にマップし、値に 2 つ以上のインバウンド参照がある場合に頂点を再利用できるようにします。

のドキュメントは、いつHashtbl.hashでもいつでも使用するのに適していることを示唆していますが、ハッシュテーブルへのアクセスが可能な限り O(1) に近いことを確認したいので、(この場合は潜在的に大きい) オブジェクトをウォークしたくありませんルックアップごとにグラフ化します。StateIdentity.equal = (=)StateIdentity.equal = (==)Hashtbl.hash

Ocaml が参照を移動することは知っていますが、Ocaml で使用できる参照 ID の O(1) プロキシはありますか?

Ocaml の変更可能な変数の Hashtableに対する答えは、そうではないことを示唆しています。

これは診断コードであるため、状態にシリアル番号を付けるのは嫌いです。これにより発生するエラーは、他のバグを隠す可能性があります。

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

c# - 他の文字列と同等の参照ではない文字列を作成することは可能ですか?

.NETは、参照によって値が等しい文字列を作成するのに邪魔にならないようです。

LINQPadでは、インターン文字列定数をバイパスすることを期待して、次のことを試しました。

しかし、それはを返しますtrue。ただし、他のオブジェクトstringと確実に区別できるものを作成したいと思います。string

(ユースケースは、オプションのパラメーターに使用する番兵値を作成することです。WebFormsをラップしています。Page.Validate()呼び出し元がオプションの検証グループ引数を指定したかどうかに応じて、適切なオーバーロードを選択したいと思います。発信者がその引数を省略したかどうか、または私のデフォルト値と等しい値を渡したかどうかを検出します。明らかに、この特定のユースケースにアプローチする他のあまり難解な方法はありませんが、この質問の目的はより学術的です。)、

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

c# - Equals オーバーライドで object.ReferenceEquals(null, this) を実行したいのはなぜですか?

私がレビューしていた次のコードを検討してください。

このコードの最初の行が私の好奇心を刺激しました。が null の場合は常にthis、メソッドは false を返す必要があります。!object.ReferenceEquals(other, null)これで、プログラマーは, を使用して状況をショートカットするつもりだったと確信していますが、彼はそれが null になる可能性があるとnull主張しています。this私はそれができないと主張しています(誰かが直接メモリ操作を使用しない限り)。そのままにしておくべきですか?

0 投票する
0 に答える
310 参照

c# - Mono での ReferenceEquals 文字列比較の問題

Mono (unix システムの下) で Uri オブジェクトを作成しています。これは非常に単純です (VStudio/Windows のように): new Uri(" http://my.url_here.com/ ")。次に、Uri を使用する別のシステム オブジェクトを作成しています: HttpSelfHostConfiguration()。

HttpSelfHostConfiguration のソース コードでは、受信した Uri は次の if ステートメントを使用して検証されます (Mono ソースで確認)。

「ReferenceEquals(baseAddress.Scheme、Uri.UriSchemeHttp)」がfalseを返すため、「if」は失敗します。これは、Mono(Unixで実行)の場合、baseAddress.SchemeがUri.UriSchemeHttpと等しくないことを意味します。

baseAddress.Scheme = "http" および Uri.UriSchemeHttp = "http" である Mono(Unix) でのデバッグが確認されていることに注意してください。

VStudio では、これは完璧に機能します。

Mono(Unix) で ReferenceEqual がどのように機能するかを理解するのを手伝ってくれる人はいますか?最も重要なのは、上記の if ステートメントで検証に合格する有効な Uri を Mono で作成するにはどうすればよいですか??

どうもありがとう

0 投票する
6 に答える
4552 参照

java - == 演算子を使用すると、等号と比較してパフォーマンスがどのように向上しますか?

Joshua Bloch 著の「Effective JAVA」で、静的ファクトリ メソッドについて読んでいたときに、次のような記述がありました。

繰り返し呼び出しから同じオブジェクトを返す静的ファクトリ メソッドの機能により、クラスは常にどのインスタンスが存在するかを厳密に制御できます。これを行うクラスは、インスタンス制御であると言われています。インスタンス制御クラスを作成する理由はいくつかあります。インスタンス制御により、クラスはそれがシングルトン (項目 3) またはインスタンス化不可能 (項目 4) であることを保証できます。また、不変クラス (項目 15) が、2 つの等しいインスタンスが存在しないことを保証できるようにします: a.equals(b) は、a==b の場合のみです。クラスがこれを保証する場合、そのクライアントは equals(Object) メソッドの代わりに == 演算子を使用できるため、パフォーマンスが向上する可能性があります。列挙型 (項目 30) は、この保証を提供します。

== 演算子がどのようにパフォーマンスの向上をもたらすかを調べるために、 String.javaを調べる必要がありました。

このスニペットを見ました

パフォーマンスの向上によって、彼はここで何を意味しますか? それがどのようにパフォーマンスの向上をもたらすか。

彼は次のように言うつもりですか

すべてのクラスが a==b の場合にのみ a.equals(b) を保証できる場合、それは、2 つの異なるメモリ空間を参照するオブジェクトが存在できず、メモリである同じ data を保持することができないという間接的な要件をもたらすことを意味します。無駄。それらが同じデータを保持している場合、それらは1つの同じオブジェクトです。つまり、同じメモリ位置を指しています。

私はこの推論で正しいですか?

私が間違っている場合は、これを理解するために私を導くことができますか?

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

c# - 文字列がインターンしているのに参照が異なるのはなぜですか?

なぜs3がインターンしたのか理解できませんが、ReferenceEqualsFalseでした。

彼らはインターン プールに 2 つのコピーを持っていますか?

前もって感謝します。

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

java - 参照等価を使用したコレクション

Javaでは、メソッドの代わりにHashMap参照の等価性 (つまり) を使用して作成することは可能ですか?==equals()