0

問題は単純です: 実際の変数を関数に渡す必要があります。

private var test:String = "KKK";
trace (" Before --->>> " + test);
testFunction(test);
trace (" Next --->>> " + test);

private function testFunction(d:String):void{
   d = "MMM";
}

結果:

Before --->>> KKK
Next --->>> KKK

結果は正しいですが、私が望むのは、実際のtest変数を関数に送信し、それを変更することです。したがって、次のような出力が必要です。

Before --->>> KKK
Next --->>> MMM

解決策はありますか?

ご回答いただきありがとうございますが、このようなコードがある場合は、実際の変数を関数に渡す必要があります。

if ( lastPos == -1 ){// if this is first item 
    flagLEFT = "mid";
    tempImageLEFT = new Bitmap(Bitmap(dataBANK[0]["lineimage" + 10]).bitmapData);
}else if (nextPos == -1){// if this is the last position
    flagRIGHT = "mid";
    tempImageRGHT = new Bitmap(Bitmap(dataBANK[0]["lineimage" + 13]).bitmapData);
}

ご覧のとおり、変更は と にflagLEFTありtempImageRGHTます。また、通常の方法で処理できる数字 (10 と 13) に変更があります。私はこのようなものが必要です:

private function itemFirstLast(flag:String, bmp:Bitmap, pos:int):void{
    flag = "mid";
    bmp = new Bitmap(Bitmap(dataBANK[0]["lineimage" + pos]).bitmapData);
}

解決策はありますか?

4

3 に答える 3

2

1つの方法は、新しい文字列を返し、それをテストに割り当てることです。

private var test:String = "KKK";
trace (" Before --->>> " + test);
test = testFunction(test);
trace (" Next --->>> " + test);

private function testFunction(d:String):String{
   d = "MMM";
   return d;
}

これはまだ実際の文字列オブジェクトを通過しませんが、テスト文字列は変更されます。文字列はAS3で値によって渡されます。実際に文字列を渡したくない場合は、オブジェクトでラップできます。

var object:Object {
   "test":"KKK"
};
trace (" Before --->>> " + object["test"]);
testFunction(object);
trace (" Next --->>> " + object["test"]);

private function testFunction(o:Object):void{
    o["test"] = "MMM";
}
于 2012-11-02T03:40:42.170 に答える
2

クラスインスタンスでラップする必要があります:

class StringValue{
    function StringValue( value : String ) : void{
        this.value = value;
    }
    public var value : String;

    public function toString() : String{
        return value;
    }
}


private var test:StringValue = new StringValue( "KKK" );
trace (" Before --->>> " + test);//traces 'KKK'
testFunction(test);
trace (" Next --->>> " + test);//traces 'MMM'

private function testFunction(d:StringValue):void{
   d.value = "MMM";
}
于 2012-11-02T08:09:31.047 に答える
0

次のリンクを参照してください。

http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f56.html

Object でラップする必要があります。

于 2012-11-15T12:05:33.893 に答える