問題タブ [object-identity]
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.
sql - OBJECT_ID は SQL Server で何をしますか?
の使用法を試しているところ、MSDNで次のエントリOBJECT_ID
が見つかりました。
「スキーマ スコープ オブジェクトのデータベース オブジェクト識別番号を返します。」
データベース オブジェクトの識別番号とは何ですか。また、スキーマ スコープ オブジェクトとは何ですか。私は最初よりも混乱しているようです。
django - django 1.1のフォームで使用する一般的な更新ビューからオブジェクトIDを取得するにはどうすればよいですか?
ジェネリックビューを使用してオブジェクトを更新しています。
私はフォームを使用しています:
私はこの一般的なビューを使用しています:
しかし、フォームのobject_idが不明なため、エラーが発生します。フォームで使用するリクエストオブジェクトIDをクリーンにするにはどうすればよいですか。
どうも
編集:ここにエラーがあります:
グローバル名'object_id'が定義されていません
mongodb - mongodb の $all パラメータが ObjectId リストで機能しない
ObjectId のリストを取得し、パラメーター $all を使用して mongo データベース内のすべてのオブジェクトを取得したい
私はpymongoを使用しており、リクエストは次のようになります:
しかし、リクエストによって返されるカーソル数は0ですが、このリクエストを行うと:
それは私に良いオブジェクトを返します
なぜそれが機能しないのか誰にも分かりますか?
node.js - _id を使用して参照する際のパフォーマンスに最適なのはどれですか? _id を使用して取得しているときに、INVALID OBJECT ID というエラーが発生します
別のコレクションのコレクション、一意のユーザー名またはデフォルトの _id (オブジェクト ID)、または新しいレコードが挿入されたときに増加する通常の ID を参照するにはどうすればよいですか。オブジェクト ID が mongoose のパフォーマンスを向上させることを読みましたが、_ids を使用してレコードを取得できず、エラー INVALID OBJECT ID が発生しました。username などの他のキーを使用して取得するときにエラーが発生しません。しかし、_id がパフォーマンスを向上させるので、私はそれを使用しようとしています。
schema を定義する際に、これらの 2 つの方法を試しました。
1) _id は自動的に作成されるため、定義はありません。
2) _id を次のように定義しました: _id : { type : Schema.ObjectId }
どちらの方法でも、レコードを取得するときに「無効なオブジェクト ID」というエラーが表示されます
ありがとう
python - 異なるアイデンティティを持つことが保証されているオブジェクトは何ですか?
元の質問:
(私の質問は Python 3.2+ に適用されますが、これが Python 2.7 以降に変更されているとは思えません。)
通常、オブジェクトを作成すると予想される式を使用するとします。例: [1,2,3]
; 42
; 'abc'
; range(10)
; True
; open('readme.txt')
; MyClass()
; lambda x : 2 * x
; 等
このような 2 つの式が異なる時間に実行され、「同じ値に評価される」(つまり、同じ型を持ち、等しいと比較される) とします。Python はどのような条件下で、2 つの式が実際に 2 つの異なるオブジェクトを作成することを保証する、私が個別オブジェクトと呼ぶものを提供しますか (つまり、 2 つのオブジェクトが と にバインドされ、両方が同時にスコープ内にあると仮定すると、 として評価されます) x is y
?False
x
y
可変型のオブジェクトについては、「個別のオブジェクトの保証」が保持されることを理解しています。
str
また、特定の不変型 ( 、int
) については保証が成り立たないことも知っています。他の特定の不変型 ( bool
、NoneType
) については、逆の保証が適用されます。
しかし、他のすべての不変型についてはどうでしょうか。
特に、異なる時期に作成された 2 つのタプルが同じ ID を持つことはありますか?
私がこれに興味を持っている理由は、グラフ内のノードを のタプルとして表しint
、ドメイン モデルでは、任意の 2 つのノードが (同じ値のタプルで表されている場合でも) 区別されるようになっているためです。ノードのセットを作成する必要があります。異なる時点で作成されたタプルが個別のオブジェクトであることを Python が保証する場合、単純にサブクラス化tuple
して、同一性を意味するように再定義することができます。
しかし、別の時点で作成されたタプルが明確であることが保証されていない場合、上記の方法は恐ろしい手法であり、ランダムに出現する可能性があり、複製や発見が非常に困難な潜在的なバグを隠してしまいます。その場合、サブクラス化は役に立ちません。実際には、余分な要素として一意の ID を各タプルに追加する必要があります。または、タプルをリストに変換することもできます。いずれにせよ、私はより多くのメモリを使用します。明らかに、元のサブクラス化ソリューションが安全でない場合を除き、これらの代替手段を使用しないことをお勧めします。
私の推測では、Python は、組み込みまたはユーザー定義の不変型に対して「個別オブジェクト保証」を提供していません。しかし、ドキュメントでそれについて明確な声明を見つけられませんでした。
更新 1:
@LuperRouch @larsmansこれまでの議論と回答に感謝します。ここに私がまだはっきりしていない最後の問題があります:
ユーザー定義型のオブジェクトを作成すると、既存のオブジェクトが再利用される可能性はありますか?
これが可能であれば、私が使用しているクラスがそのような動作を示す可能性があるかどうかを確認する方法を知りたいです。
これが私の理解です。ユーザー定義クラスのオブジェクトが作成されるときはいつでも、クラスの__new__()
メソッドが最初に呼び出されます。このメソッドがオーバーライドされた場合、プログラマーが既存のオブジェクトへの参照を返すことを妨げる言語は何もないため、「個別のオブジェクトの保証」に違反します。明らかに、クラス定義を調べることでそれを観察できます。
__new__()
ユーザー定義のクラスがオーバーライドされない場合(または明示的__new__()
に基本クラスに依存している場合) はどうなるかわかりません。私が書いたら
オブジェクトの作成は によって処理されint.__new__()
ます。これは、次のアサーションが失敗する場合があることを意味すると思います。
しかし、私の CPython での実験では、そのような動作を実現できませんでした。これは、言語が をオーバーライドしないユーザー定義クラスに「個別のオブジェクト保証」を提供することを意味するの__new__
でしょうか、それとも単に任意の実装動作なのでしょうか?
更新 2:
私DistinctTuple
の実装は完全に安全であることが判明しましたが、DistinctTuple
ノードをモデル化するために使用するという私の設計思想が非常に悪いことがわかりました。
ID 演算子は言語で既に使用可能です。==
と同じように振る舞うことは、論理的にis
不必要です。
さらに悪いことに、==
何か役に立つことができたとしても、それを利用できないようにしました。たとえば、プログラムのどこかで、2 つのノードが同じ整数のペアで表されているかどうかを確認したい場合がよくあります。==
それには完璧だったでしょう-そして実際、それはデフォルトでそれが行うことです...
さらに悪いことに、ほとんどの人は==
、ユーザー定義のクラスであっても、ID ではなく「値」を比較することを実際に期待しています。身元だけを見る私のオーバーライドでは、彼らは気づかないうちに捕まってしまうでしょう。
最後に...再定義しなければならなかった唯一の理由は==
、同じタプル表現を持つ複数のノードをセットの一部にできるようにすることでした。これは間違った方法です。==
変更する必要があるのは動作ではなく、コンテナーの種類です! セットの代わりにマルチセットを使用する必要がありました。
要するに、私の質問は他の状況ではある程度の価値があるかもしれませんが、作成は私のユースケースにとってひどい考えであると確信してclass DistinctTuple
います (そして、有効なユースケースがまったくないのではないかと強く思っています)。
ruby - Ruby がオブジェクト ID を降順で割り当てる傾向があるのはなぜですか?
オブジェクトには直感に反する方法で ID が割り当てられていることに気付きました。オブジェクトの作成が早ければ早いほど、そのオブジェクト ID は大きくなります。逆ではなく、昇順で割り当てられていると思っていたでしょう。
例えば:
また、Ruby インタープリターによって実行されるコードでは 1 ではなく 20 のステップがあるのに、Ruby の irb によって実行されるコードのオブジェクト ID の差が非常に大きいのはなぜですか?
ios - URLからobjectIDを取得する方法は?
私のコードは以下の通りです:
それから私はこのように反対されたいです:
ただし、objIDはnilです。何か問題がありますか?どうやってするか ?ありがとう !
php - mongoDB で更新が許可されない
わかりました、この問題は私を狂わせています._idはObjectIDであると思っていましたが、_idを使用して更新しようとすると、最初に挿入すると正しく機能しません。
ここに私のコードがあります
私は次のことをしようとしました
しかし、それは役に立たないようです。
何が起こっているかというと、最初は ObjectID(idnumber) で正しく挿入され、更新時に ObjectID() が削除され、以前と同じ idnumber を持つ新しいリードが挿入されます。
「IDNUMBER」のように見えます
mongodb - DDDとMongoDB:MongoにObjectIDを作成させても大丈夫ですか?
DDD(Blue book、Evans)によると、ファクトリは有効な状態で集約ルートを作成する責任があります。これは、ドメインIDだけでなくテクニカルID(mongoDBの世界ではobjectId)を作成できる必要があることを意味しますか?
一方では、これは技術的な詳細のようであり、MongoにIDの作成を処理させることは問題ないように思われます。
一方、IDによるクエリを有効にすると(getById
DDDリポジトリにあることにより)、テクニカルIDがドメインに公開されます。これにより、ファクトリがIDを作成する必要があります。
テクニカルIDとドメインIDのさまざまなユースケースやオーバーラップなどに頭を悩ませることができないか、熱心に取り組んでいる可能性がありますが、とにかくあなたの意見をいただければ幸いです。
つまり、DDDの場合:ファクトリはドメインIDだけでなくテクニカルIDも作成できる必要がありますか?
可能な実装:Hi / Lo(MongoDB Normでhiloシーケンスの開始値を設定する方法は?)
編集: hi / loの方法では、ファクトリが永続層に公開されますが、これはリポジトリだけが知っておくべきことです。うーん
ありがとう
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?