私が ActionScript で最も見逃していることの 1 つは、演算子のオーバーロード (特に ==) がないことです。クラスに「Compare」メソッドを追加することでこの問題を回避していますが、組み込みの Dictionary などを使用する場合など、多くの場合は役に立ちません。
この問題を回避する良い方法はありますか?
私が ActionScript で最も見逃していることの 1 つは、演算子のオーバーロード (特に ==) がないことです。クラスに「Compare」メソッドを追加することでこの問題を回避していますが、組み込みの Dictionary などを使用する場合など、多くの場合は役に立ちません。
この問題を回避する良い方法はありますか?
いいえ。
equals
しかし、独自のクラスにメソッドを追加しても害はありません。IDのみをチェックするため、==
オブジェクトを比較するときは決して使用しないようにします (オブジェクトについても同じことが言えます) 。===
悲しいことに、Flash と Flex のすべてのコレクションは、同一性が必要な唯一の尺度であると想定しています。
Flex には、かつて誰かがこの問題を軽減したいと考えていたというヒントがありますが、放棄されたようです。IUIDと呼ばれるインターフェースがあり、 Flex Developer's Guideで言及されていますが、どこにも使用されていません。Flex のコレクションでさえ、これを使用して等価性を判断することはありません。そして、あなたは Flash の解決策を求めているので、とにかく役に立たなかったかもしれません.
これについては (Flex のコンテキストで) ブログに詳しく書いています: Is there no equality? .
はい、できます(ただし、ハックなので注意してください):http://filimanjaro.com/2012/operators-overloading-in-as3-javascript-too-%E2%80%93-workaround/
チュートリアルでは、+=, -= 演算子のオーバーロードについて書きました。==でも可能ですが、不明な場合は詳しく書きます。
ああ、このアプローチにはいくつかの欠点があります (まれに危険な場合もあります)。プロダクションで使用する前に、よく考えてください。
編集:
テストの後、+=、-= のトリックは == 演算子には適用されないようです (理にかなっています)。誤解を招く情報で申し訳ありません。