1

Python + PyAMFを使用してFlexクライアントとやり取りしていますが、使用しているpsudo-Enum-Singletonsで問題が発生しました。

class Type {
    public static const EMPTY:Type = new Type("empty");
    public static const FULL:Type = new Type("full");
    ...

}

ローカルで作成されたインスタンスを使用している場合、すべてが桃色です。

if (someInstance.type == Type.EMPTY) { /* do things */ }

ただし、「someInstance」がPythonコードからのものである場合、「type」のインスタンスは明らかにType.EMPTYまたはのいずれにもなりませんType.FULL

それで、私のコードを機能させるための最良の方法は何ですか?

AMFの逆シリアル化を制御できる方法はありますか?リモートをロードするTypeと、正しい変換が呼び出されますか?それとも、弾丸を噛んで、Types他のものを使用して比較する必要があり==ますか?それとも、私はどういうわけかタイプの結束をだまして==私がやりたいことをすることができますか?

編集:あるいは、Flexのリモーティングスイートは、インスタンスが逆シリアル化された後に実行されるフックを提供するので、変換を実行できますか?

4

1 に答える 1

1

ランダムな考え: Type に一致する正規バージョンを返すメンバー関数を作成できるのではないでしょうか?

何かのようなもの:

class Type {
  public static const EMPTY:Type = new Type("empty");
  public static const FULL:Type = new Type("full");
  ...

  // I'm assuming this is where that string passed
  // in to the constructor goes, and that it's unique.
  private var _typeName:String;

  public function get canonical():Type {
    switch(this._typeName) {
      case "empty": return EMPTY;
      case "full": return FULL;
      /*...*/
    }
  }
}

どの値が python から来ているかを知っている限り、最初はそれらを変換するだけです:

var fromPython:Type = /*...*/
var t:Type = fromPython.canonical;

その後 t を使用します。

いつ Python からのものでいつ AS3 からのものなのかわからない場合は、かなり厄介になりますが、AS と Python コードの間に分離レイヤーがある場合は、そこで変換を行うようにすることができます。

逆シリアル化を制御できるほどきれいではありませんが、適切な分離レイヤーがある限り、機能するはずです。

于 2009-09-16T18:57:35.473 に答える