以下のコードのように、単一の文字列をパラメーターとして受け取る Red5 サービス関数と、パラメーターをとらない別の関数があります。
public class AService
{
private String someName;
public void setName(String aName)
{
someName = aName;
}
.
.
public String makeMessage()
{
return("Hello, "+someName);
}
.
.
other functions
}
動的パラメーターを使用して、サービス関数を呼び出す ActionScript 関数もあります。
public class Connector
{
private var netConn: NetConnection;
public function invokeCall(theFunc:String,...theParams): void
{
var resp:Responder = new Responder(checkResult);
netConn.call(theFunc,resp,theParams);
}
.
.
}
「...theParams」が実際にはパラメーター オブジェクトの配列であることは承知しています。また、NetConnector クラスの call() メソッドがそのパラメータ オブジェクト配列を使用していることも知っています。残念ながら、サービスの makeMessage() メソッドで (パラメーターを入れずに) invokeCall() を実行すると、次のようになります。
invokeCall("AService.makeMethod");
Red5 から関数が存在しないというメッセージが表示されます。私がそれを機能させる唯一の方法は、パラメーター付きとパラメーターなしの 2 つの呼び出しメソッドを作成し、その関数をパラメーターなしで呼び出すことです。
さらに、次のように setName() 関数を呼び出します。
invokeCallwithPrams("AService.setName","factor3");
サービス関数の署名を変更しない限り、動作しないようです:
public class AService
{
private String someName;
public void setName(String[] aName)
{
someName = aName[0];
}
.
.
public String makeMessage()
{
return("Hello, "+someName);
}
.
.
other functions
}
これは気にしません (Red5 のドキュメントでは、パラメーターを配列として扱う必要はないことが示されていますが)、文字列 "factor3" を NetConnection クラスの call() メソッドに渡すと、どういうわけかsetName() では "[factor3]" になります!
明らかに、ここで何かがおかしいのですが、私はそれを理解することができませんでした.
Red5 バージョン 1.0.1 を使用しており、Actionscript はバージョン 3 です。
何が起こっているのか、そして(さらに重要なことに)これを修正する方法を誰かに説明してもらえますか???
もしよろしければアドバイスを...
更新: 奇妙さは続く
NetConnection クラスの call() メソッドのセットアップと呼び出しに使用した関数のパラメーターを変更するテストを行いました。「...theParams」を渡す代わりに、次のように theParams:String に変更しました。
public function invokeCall(theFunc:String,theParams:String): void
{
var resp:Responder = new Responder(checkResult);
netConn.call(theFunc,resp,theParams);
}
興味深いことに、サービス メソッド setName() に表示されていた括弧がなくなりました。
この問題が何であれ、それは Actionscript の動的パラメーターと関係があります。私は、別のメソッドからメソッドに渡される動的パラメーターを適切に処理できないというバグを Actionscript 3 で発見したのではないかと考えています。
他の誰かがこの問題を見たことがありますか? 解決策はありますか?動的パラメーターは、誰でも必要に応じてパラメーターを追加し、必要なオブジェクトにすることができるようになっています。残念ながら、別のメソッドから渡された動的パラメーターを台無しにすることなく使用できるようには見えません。
これは、Actionscript の重大なバグのようです。私は正しいですか?
誰かアドバイスください...