2

オブジェクトを取得してループし、オブジェクトの値をクラスに割り当てるメソッドを持つクラスを取得しました。これはアプリケーションでかなり発生する可能性があり、オブジェクトのプロパティ名が存在することを検証し、クラスに割り当てる前に値の型を確認するための効率的で、できれば言語に依存しない構文があるかどうか疑問に思いました。このコードを少なくともflashとjavascriptにエクスポートする必要があります。おそらく、後でフォローする他のコードもエクスポートする必要があります。メソッドは基本クラスにあるため、ジェネリックに保つ必要があります。以下の線に沿った何か:

public function updateProperties(propsObj:Object):void {
  for (var prop in propsObj) {
    if (/* this has prop && typeof propsObj[prop] == typeof this[prop] */) {
      this[prop] = propsObj[prop];
    }
  }
}

Haxeは初めてなので、この種のメソッドのファミリーを見つけるのに苦労しています。リフレクトは私が探しているものに近いメソッドを持っているようですが、多くのメソッドは私が必要としているものに対してやり過ぎかもしれないように見え、いくつかの洞察を望んでいました。

4

1 に答える 1

5

これはうまくいくようです。

public function updateProperties(props:Dynamic) {
  for (prop in Reflect.fields(props)) {
    if (Reflect.hasField(this, prop)) {
      Reflect.setProperty(this, prop, Reflect.getProperty(props, prop));
    } else {
      trace("cannot set property " + prop + " on " + this);
    }
  }
}
于 2012-10-22T21:34:34.230 に答える