ブログトップ >  いいじゃん > AS3の…(rest)パラメータにハマった
2009年04月16日

AS3の…(rest)パラメータにハマった

Action Script3から追加された「…(rest)パラメータ」にハマりました。
「…(rest)パラメータ」というのは、関数の引数が何個でもいいよーっていう凄く便利な代物なのですが、「…(rest)パラメータ」で受け取った値を「…(rest)パラメータ」を要求する関数に渡そうとして半日くらいはまっていました。
具体的にはこんな感じ。

function hogehoge(commnad: string, callback : function, … args) : void{
 var con : NetConnection = new NetConnection();
 con.connect(・・・);
var responder : Responder = new Responder(callback, this.onFault);
 
con.call(command, responder, args);
}

これでamfphp を使ってPHP側にデータを渡すと、なぜか「array型」になる。
もちろん、PHP側でarrayから取り出す方法もあるが、侍プログラマ的にはNG。
なぜなら、キッチリ解決しないとあとで使い回しができないからである。
まず解決策として思いついたのが、「argumentsオブジェクト」。
「con.call(commnad, responder, arguments[2]); 」とかやってみたら、
コンパイル時にエラー!
「未定義のプロパティ arguments へのアクセスです。」
ナンデヤネン(`^`)!!!
リファレンスをよく読んでみたら、「…rest パラメータを使用したときは、argumentsを使えません」
・・・なるほど。
いろいろと調べていると、「AS3: 「… (rest)」で受け取ったパラメータを他の関数にそのまま渡す」ってのを発見!
それによると、「applyを使え!」
OH! That’s great!!!
たしかに、それなら行けますよね!
ってことで、最終的にはこんな感じ。

function hogehoge(commnad: string, callback : function, … args) : void{
 var con : NetConnection = new NetConnection();
 con.connect(・・・);
var responder : Responder = new Responder(callback, this.onFault);
 
var params : Array = new Array();
params.push(command);
params.push(responder);
params.push.apply(params, args);
con.call.apply(con, params);
}

あー、解決してよかった!

このページのトップへ

ブログについて

ホームページ制作のいいじゃん沼津のスタッフブログです。

いいじゃん ホームページ作成サービスいいじゃん ホームページ作成サービス

運営会社

有限会社システムエイド有限会社システムエイド

〒410-0822
静岡県沼津市下香貫宮脇200-3
TEL. 055-935-1339
FAX. 055-935-1340

えいど君について

えいど君
  • 名前:えいど君(パソコンの妖精)
  • 誕生日:2002年2月14日
  • 性別:パソコン
  • メモリー:32GB
  • 口癖:「いいじゃん!

アーカイブ

最新3ヶ月 年別