問題タブ [partial-ordering]
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.
python - Python が __le__ と __ge__ のデフォルトの実装を提供しないのはなぜですか?
比較関係 (=、≠、<、>、≤、および ≥) 間の次の数学的関係は常に有効であるため、デフォルトで Python に実装されます (恣意的に見え、この投稿の理由である 2 つの和集合関係を除きます)。
- 2つの補完関係: 「= と ≠ は互いに補完し合う」;
- 6逆関係*: 「= は自分自身の逆」、「≠ は自分自身の逆」、「< と > は互いに逆」、「≤ と ≥ は互いに逆」;
- 2結合関係: "≤ は < と =" の結合であり、"≥ は > と =" の結合です。
比較関係間の次の関係は、合計注文functools.total_ordering
に対してのみ有効であるため、Python ではデフォルトで実装されていません (ただし、Python 標準ライブラリによって提供されるクラス デコレータで有効な場合、ユーザーは便利に実装できます)。
- 4つの補完関係:「<と≧は互いに補完し合い」、>と≦は互いに補完し合う。
なぜ Python には上記の 2 つの和集合の関係しかないのですか ("≤ は < と =" の和集合であり、"≥ は > と =" の和集合です)。
これらのように、 inとのデフォルト実装、およびin__le__
とのデフォルト実装を提供する必要があります(ただし、おそらくパフォーマンスのために C で、 のように):__lt__
__eq__
__ge__
__gt__
__eq__
__ne__
2 つのユニオン関係は常に有効であるため、これらの既定の実装により、ユーザーは常にそれらを提供する必要がなくなります (ここのように)。
これは、2つのユニオン関係が現在デフォルトで実装されていないことを明示的に述べているPythonドキュメントの段落です(太字の強調鉱山):
デフォルトでは、 に
__ne__()
委任し__eq__()
、そうでない限り、結果を反転しNotImplemented
ます。比較演算子の間には、他の暗黙の関係はあり(x<y or x==y)
ませんx<=y
。
* 逆の関係は、NotImplemented
プロトコルを通じて Python で実装されます。
c++ - メンバーとフリーのオペレーターに関する曖昧さ回避規則
次のようなプログラムがあります。
このシナリオでは、関数 2 が呼び出されます。しかし、関数1をメンバー関数ではなくフリー関数に変更すると
ここで関数 1 が呼び出されますが、どちらの場合も関数 1 は基本的に同じです。この背後にある理由は何ですか?GCC は、ISO C++ 標準に従ってあいまいさについて不平を言っていますが、正確な原因を述べておらず、とにかく正常にコンパイルされます。このケースは、メンバーであるかどうかに関係なく同じ方法で呼び出すことができるため、オペレーターに固有です。