[Astro] Vector クラス(6) ~Vector を返す関数~
2008/05/27 20:27 - Astro
今回で Vector はひとまず終わり。
最終回は Vector 型の返り値を持つユーザ関数の定義についてです。
ここで初心に戻ってユーザ定義関数の記述方を改めて見てみます。
function 関数名( [ 引数:型, ... ] ):返り値の型 { 何らかの処理 …… …… return 返り値; }
この記法に則ると Vector 型の返り値を持つ関数は以下のようなイメージになります。 ここでは Vector.<uint> を返すものとしています。
function 関数名( [ 引数:型, ... ] ):Vector.<uint> { var vec:Vector.<uint> = new Vector.<uint>(); 何らかの処理 …… …… return vec; }
このように、返る Vector オブジェクトが .<int> だ .<Number> だ、と <> 内の型がキッチリ決まっている場合はいいです。
問題なのは <> 内の型がケース・バイ・ケースで異なるような関数を書きたいと思った場合です。
たとえば、引数として Vector 型のオブジェクトを取り、その Vector オブジェクトに対して何らかの処理をして、その Vector オブジェクトを返したいような場合。
具体例としては Vector のシャッフルなんかがあり得そうです。
function シャッフル( vec:Vector.<uint> ):Vector.<uint> { vec に対するシャッフル処理 return vec; }
上記のように、引数と返り値の Vector に対して .<uint> みたいな型指定をした記述にすれば、コンパイルは通ります。 しかしこれではシャッフル関数の汎用性が著しく損なわれます。
ここは Vector.<type> の type は何でもアリにしたいところ。
Vector 第3回コピー編でやった Vector.concat のように、どんな型の Vector でも引数として取ることができるような記述方法がたぶんあるんじゃないかと思うんですが、今のところ仕入れた範囲の情報では、どういう記述をして良いのか分かりません。
そんなわけで Vector 型を返すユーザ定義関数の書き方については、今後の情報待ちってことで。
最後の最後が未解決というモヤモヤした想いを抱いたまま Vector についてのエントリーは終了です。
シリーズ
- Vector クラス(5) ~多次元配列~
- Vector クラス(4) ~生成時に要素格納~
- Vector クラス(3) ~コピー~
- Vector クラス(2) ~要素へのアクセス~
- Vector クラス(1)