私は種類のベクターを用いたいくつかの奇妙な行動に気づいてきたint
、uint
とNumber
。自分でテストできるコードは次のとおりです。
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
private var untypeds:Vector.<*> = new <*>[{}, 7];
private var objects:Vector.<Object> = new <Object>[{}, {}];
private var sprites:Vector.<Sprite> = new <Sprite>[new Sprite(), new Sprite()];
private var events:Vector.<Event> = new <Event>[new Event("1"), new Event("2")];
private var booleans:Vector.<Boolean> = new <Boolean>[true, false];
private var strings:Vector.<String> = new <String>["1", "2"];
private var ints:Vector.<int> = new <int>[-5, -6];
private var uints:Vector.<uint> = new <uint>[5, 6];
private var numbers:Vector.<Number> = new <Number>[2.5, 5.2];
public function Main()
{
myFunc("untypeds");
myFunc("objects");
myFunc("sprites");
myFunc("events");
myFunc("booleans");
myFunc("strings");
myFunc("ints");
myFunc("uints");
myFunc("numbers");
}
// Note that I'm only using a string parameter for tracing purposes.
// The same results would be seen if the vector was passed directly as an untyped argument.
private function myFunc(vecName:String):void
{
var vec:Vector.<*> = this[vecName] as Vector.<*>;
trace(vecName + " as Vector.<*>: " + vec + " Same object? " + (vec == this[vecName]));
vec = Vector.<*>(this[vecName]);
trace("Vector.<*>(" + vecName + "): " + vec + " Same object? " + (vec == this[vecName]));
}
}
}
そして、これが出力です:
untypeds as Vector.<*>: [object Object],7 Same object? true
Vector.<*>(untypeds): [object Object],7 Same object? true
objects as Vector.<*>: [object Object],[object Object] Same object? true
Vector.<*>(objects): [object Object],[object Object] Same object? true
sprites as Vector.<*>: [object Sprite],[object Sprite] Same object? true
Vector.<*>(sprites): [object Sprite],[object Sprite] Same object? true
events as Vector.<*>: [Event type="1" bubbles=false cancelable=false eventPhase=2],[Event type="2" bubbles=false cancelable=false eventPhase=2] Same object? true
Vector.<*>(events): [Event type="1" bubbles=false cancelable=false eventPhase=2],[Event type="2" bubbles=false cancelable=false eventPhase=2] Same object? true
booleans as Vector.<*>: true,false Same object? true
Vector.<*>(booleans): true,false Same object? true
strings as Vector.<*>: 1,2 Same object? true
Vector.<*>(strings): 1,2 Same object? true
ints as Vector.<*>: null Same object? false
Vector.<*>(ints): -5,-6 Same object? false
uints as Vector.<*>: null Same object? false
Vector.<*>(uints): 5,6 Same object? false
numbers as Vector.<*>: null Same object? false
Vector.<*>(numbers): 2.5,5.2 Same object? false
注ベクトルにキャストしている。<*>を除き、どのような場合に罰金を働きint
、uint
とNumber
。そのような場合、グローバルVector()
関数を使用してキャストするとベクトルのコピーが返され、を使用してキャストするとas
が返されますnull
。
任意のタイプのベクトルを変更することを目的とした関数に数値ベクトルを渡す方法はありますか?
EDIT:キャストしようとしたとき、私はちょうど同じ問題を観察しているVector.<int>
とVector.<Number>
3つの数値型は動作しませんのためにその機能の追加のバージョンを有します、。
「数値ベクトルを関数に渡して、任意のタイプのベクトルを変更する方法はありますか?」
これが必要かどうかはわかりませんが、*
関数の入力パラメーターとしてワイルドカード()を使用してください。これにより、さまざまな数値タイプのベクトルを使用できるようになります。
var ints:Vector.<int> = new Vector.<int>();
var numbers:Vector.<Number> = new Vector.<Number>();
ints.push( 5, 3, 7 );
numbers.push( -2.8, 1.5, -1.4 );
function vect_Push (input:*) : void
{
input.push( input[input.length-1] * 2 );
}
function vect_Mixed (inputA:* , inputB:*) : void
{
inputB[inputB.length-1] = inputA[inputA.length-1] * inputB[inputB.length-1];
}
上記のコードでは...
function vect_Push
vector
またはarray
(実際には.push
メソッドに応答する任意のデータ型)を取り、もう1つの新しいエントリを追加します。function vect_Mixed
2つの混合vector
配列を取ります(そうなるinputA
可能性がありますがints
、inputB
可能性がありnumbers
ます。1つの最後のエントリはそれぞれの他のエントリと乗算されます)。上記のコードをテストするには...
//# test for : modify any vector (using Push to add one extra new entry)
trace("Old length ints : " + ints.length);
vect_Push(ints); //passing Integer to function
trace("New length ints : " + ints.length); //should be +1 length
trace("Last new value ints : " + ints[ints.length-1]); //check new entry's value
//# test for : mixed vector types (multply types "int" with "Number")
vect_Mixed(ints, numbers); //passing Integer and Number to function
trace("New mult value numbers[last entry] : " + numbers[numbers.length-1]);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加